Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在特定点写入数据_Python - Fatal编程技术网

使用Python在特定点写入数据

使用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

我有一个.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
前三行是字符串,然后是数据。现在我想替换第三列的数据,新数据保存在一个数组中。最终数据如下所示

# 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']