使用Python在特定点写入数据
我有一个.gz文件,并用以下代码打开:使用Python在特定点写入数据,python,Python,我有一个.gz文件,并用以下代码打开: fin = GzipFile(fileName, "wb") 此文件中的数据如下所示: # jobname # string-name0 string-name1 string-name3 string-name4 string-name5 # time 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 前三行是字符串,然后是数据。现在我想替换第三列的数据,新数据保存在一个数组中。最终数据如下所示 # jobna
fin = GzipFile(fileName, "wb")
此文件中的数据如下所示:
# jobname
# string-name0 string-name1 string-name3 string-name4 string-name5
# time
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
前三行是字符串,然后是数据。现在我想替换第三列的数据,新数据保存在一个数组中。最终数据如下所示
# jobname
# string-name0 string-name1 string-name3 string-name4 string-name5
# time
1 2 31 4 5
6 7 81 9 10
11 12 131 14 15
那么我如何在Python中做到这一点呢?谢谢。我认为可以实现的一种方法是读取原始文件,并将未更改的数据与更改的数据一起写入新的临时文件。使用此临时文件替换原始文件 至于替换数据,只需逐个读取文件并用数组中的数据替换第三个元素即可。差不多
i = 0
for lines in file:
# Skips the comments
data = lines.split()
data[2] = new_data[i]
i = i + 1
# Write to some temp file here
# Replace original file with temp file
要创建临时文件,可以使用python的tempfile
模块
>>导入tempfile
打开文件,逐行读取,按空格拆分,进行更改,然后再次加入
import gzip
import shutil
filename = 'file.txt.gz'
new_filename = 'new.file.txt.gz'
with gzip.open(filename,'rb') as f, gzip.open(new_filename,'wb') as f_out :
lines = [l.split(" ") for l in f.readlines() if l and l.strip()] #remove trailings and empty lines
for idx,l in enumerate(lines):
if l[0]!="#":
l[2] = l[2]+"1" #your replacement
lines[idx] = ' '.join(l) #rebuild line as string
f_out.write(''.join(lines))
shutil.move(new_filename,filename) #finally, move the temp file to file
非常感谢你。idx是行的索引号吗?enumerate是获取迭代循环索引的Python方法,因此yes idx是行的索引号[idx]=''。join(l)TypeError:sequence item 2:预期的字符串,numpy.float64 Found因为行是从文件读取的数据,所以它应该是字符串。您能打印l值吗?['','4.000000 281197E-05\n']