对于超过 8091 个字符的行,wlst/Jython 2.2.1 中的文件搜索失败
file seek in wlst / Jython 2.2.1 fails for lines longer than 8091 characters
对于在 WLST/Jython 2.2.1 中生成的 CSV 文件,我想在检测到新指标时更新输出文件的第一行 header。通过使用 seek 转到第一行并覆盖该行,效果很好。但是当第一行的字符数超过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 以“New Header Line”开头,后跟 8076 点和
其次是线
第二行
第三行
第四行
第 5 行
当 maxheaderlength 为 8092> 时,test.csv 生成的文件以 8092 点开始,然后是 "New Header Line",然后是 8077 点。现在显示第 2 ... 5 行,可能被点覆盖了。
知道如何解决或解决这个问题吗?
我也能够重现这种极其奇怪的行为,而且它确实在 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()
对于在 WLST/Jython 2.2.1 中生成的 CSV 文件,我想在检测到新指标时更新输出文件的第一行 header。通过使用 seek 转到第一行并覆盖该行,效果很好。但是当第一行的字符数超过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 以“New Header Line”开头,后跟 8076 点和 其次是线 第二行 第三行 第四行 第 5 行
当 maxheaderlength 为 8092> 时,test.csv 生成的文件以 8092 点开始,然后是 "New Header Line",然后是 8077 点。现在显示第 2 ... 5 行,可能被点覆盖了。
知道如何解决或解决这个问题吗?
我也能够重现这种极其奇怪的行为,而且它确实在 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()