поиск файла в wlst/Jython 2.2.1 не работает для строк длиннее 8091 символа

Для файла CSV, созданного в WLST/Jython 2.2.1, я хочу обновить заголовок, первую строку выходного файла, когда будут обнаружены новые показатели. Это прекрасно работает, используя поиск для перехода к первой строке и перезаписывая строку. Но это не удается, когда количество символов в первой строке превышает 8091 символ.

Я сделал упрощенный скрипт, который воспроизводит проблему, с которой я столкнулся здесь.

#!/usr/bin/python
#

import sys

global maxheaderlength
global initheader

maxheaderlength=8092

logFilename = "test.csv"

# Create (overwrite existing) file
logfileAppender = open(logFilename,"w",0)
logfileAppender.write("." * maxheaderlength)
logfileAppender.write("\n")
logfileAppender.close()

# Append some lines
logfileAppender = open(logFilename,"a",0)
logfileAppender.write("2nd line\n")
logfileAppender.write("3rd line\n")
logfileAppender.write("4th line\n")
logfileAppender.write("5th line\n")
logfileAppender.close()

# Seek back to beginning of file and add data
logfileAppender = open(logFilename,"r+",0)
logfileAppender.seek(0) ;
header = "New Header Line" + "." * maxheaderlength
header = header[:maxheaderlength]
logfileAppender.write(header)
logfileAppender.close()

Когда maxheaderlength равно 8091 или меньше, я получаю ожидаемые результаты. Файл test.csv начинается с «Новой строки заголовка», за которой следуют 8076 точек, а затем строки 2-я строка 3-я строка 4-я строка 5-я строка

Когда maxheaderlength равен 8092>, результат test.csv представляет собой файл, начинающийся с 8092 точек, за которым следует «Новая строка заголовка», а затем 8077 точек. 2-я ... 5-я строка теперь отображается, вероятно, перезаписана точками.

Любая идея, как обойти или исправить это?


person pcvnes    schedule 15.04.2015    source источник
comment
Я вижу вашу проблему на Jython 2.2.1. Я вижу ожидаемое поведение на Jython 2.5.3 и 2.7b2.   -  person davidrmcharles    schedule 17.04.2015


Ответы (1)


Мне тоже удалось воспроизвести это чрезвычайно странное поведение, и оно действительно работает корректно в Jython 2.5.3, поэтому я думаю, что мы можем с уверенностью сказать, что это ошибка в версии 2.2.1 (с которой, к сожалению, вы столкнулись для WLST).

Обычно в таких обстоятельствах я прибегаю к использованию нативных методов Java. Изменение последнего блока кода следующим образом работает, как и ожидалось: -

# Seek back to beginning of file and add data
from java.io import RandomAccessFile

logfileAppender = RandomAccessFile(logFilename, "rw")
logfileAppender.seek(0) ;
header = "New Header Line" + "." * maxheaderlength
header = header[:maxheaderlength]
logfileAppender.writeBytes(header)
logfileAppender.close()
person Jeremy Gosling    schedule 17.04.2015