Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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_Python 3.x - Fatal编程技术网

Python 写一个文件并编辑一个;占位符;如果到达文件的末尾

Python 写一个文件并编辑一个;占位符;如果到达文件的末尾,python,python-3.x,Python,Python 3.x,是否有一种方法可以设置“占位符”并在以后创建文本文件时逐行编辑此部分,或者我必须在最后进行行搜索并编辑此部分 我想用常量计算选定的行数,若我到达文件的末尾,我想将列表常量的总和写入文件头 CONSTANTS = [] with open(FILENAME, 'w') as f: f.write(str(sum(CONSTANTS))) # <--- this way its just zero f.write('...'); CONSTANTS.appe

是否有一种方法可以设置“占位符”并在以后创建文本文件时逐行编辑此部分,或者我必须在最后进行行搜索并编辑此部分

我想用常量计算选定的行数,若我到达文件的末尾,我想将列表常量的总和写入文件头

CONSTANTS = []

with open(FILENAME, 'w') as f:

    f.write(str(sum(CONSTANTS)))        # <--- this way its just zero

    f.write('...'); CONSTANTS.append(1)

    f.write('...'); CONSTANTS.append(1)
    .
    .
    .
CONSTANTS=[]
将open(FILENAME,'w')作为f:

f、 write(str(sum(CONSTANTS))#您实际上不需要立即写入文件。您可以先将数据保存在内存中,然后添加标题:

data = []

data.append("string to write to the file")
# process CONSTANTS

data.insert(0, sum(CONSTANTS))

with open("file", "w") as f:
    f.writelines(line + "\n" for line in map(str, data))

您可以
seek()
返回到文件的开头并覆盖那里的数据,但问题是确定最初要“保留”多少空间,因为您不知道需要多少空间。有很多方法可以解决这个问题,但是如果不了解更多的情况/背景/约束,很难判断哪一种(如果有的话)是合适的。@martineau我编辑了我的问题。不知道它是否有用。:/无论如何,谢谢你的快速回复!在本例中:您认为seek()是一个好的解决方案吗?在我看来,您想要写的是包含已写入常量的行数(而不是它们的总和)。无论如何,您确实可以在文件开头的某个位置创建一个由固定数量的数字字符组成的占位符,并将其初始设置为类似于
“00000000”
的值,该值足够大,可以容纳最大值
9999999
。写入文件的其余部分并确定正确的值后,您可以按照我的建议返回到文件的该位置,并用正确的数字覆盖零。i、 e.
“00012345”
data = []

data.append("string to write to the file")
# process CONSTANTS

data.insert(0, sum(CONSTANTS))

with open("file", "w") as f:
    f.writelines(line + "\n" for line in map(str, data))