如果有人能指出我正确的方向,我会非常感激。我想替换以下内容:
file1 = open ('filepath')
file1.write(data1)
file2 = open ('filepath2')
file2.write(data2)
file3 = open ('filepath3')
file3.write(data3)
这样的东西可以通过迭代:
file[i] = open ('filepath')
file[i].write(data[i])
它们都需要不同名称的原因是因为所有文件必须一次打开而不关闭。这只是系统的要求。
有什么方法可以做到这一点吗?
答案 0 :(得分:3)
open_files = [open(fname) for fname in ['filepath1', 'filepath2', 'filepath3']]
for fh in open_files:
fh.write(...)
或
for i, fh in enumerate(open_files):
fh.write(data[i])
答案 1 :(得分:2)
您可以使用enumerate:
遍历文件路径for f in enumerate("fil1","file2","file3"):
with open(f,"w") as fle:
fle.write(data[i])
或压缩文件名和数据:
for f,d in zip(("fil1","file2","file3",data)):
with open(f,"w") as fle:
fle.write(d)
如果您希望它们保持打开状态,请将文件对象存储在dict中:
d = {}
for f,d in zip(("fil1","file2","file3",data)):
d[f] = open(f,"w")
f[f].write(d)
答案 2 :(得分:0)
您可以使用字典。
files = {'filepath1': open('filepath1'), 'filepath2': open('filepath2')}
如果要以迭代方式生成字典,可以执行以下操作:
path = 'filepath{0}'
for i in range(10):
filepath = path.format(i)
files[filepath] = open(filepath)
答案 3 :(得分:0)
那么你可以这样做: -
filepaths=[List of all your file paths (Ex. "abc.txt", "\c\example\abc.txt")]
fileptr =[]
for file in filepaths :
fileptr += open(file,'mode')
for fil in fileptr :
fil.write(data[i])
答案 4 :(得分:0)
感谢您提出的建议,我在查看了各种方法后,围绕这个主题进行了探讨,并提出了一个很好的解决方案(无论如何我的应用程序)。
我遇到的麻烦是我将数据写入带有覆盆子pi的网络csv文件。如果文件在其他地方打开,则pi无法再访问它并且数据丢失,因为它无法记录在csv文件中。
提示此问题的初始解决方案是立即打开所有文件,允许其他用户仅以只读模式打开csv文件,这仍然允许pi写入数据。但是这需要保留所有文件在python脚本中打开,如果我正确思考,那就是内存密集型,
因此,我发现的解决方案是只在我不用pi写入文件时才读取文件,然后只在我将信息添加到csv文件时才使其可写。
我使用了此处说明的代码:How to remove read-only attrib directory with Python in Windows?
非常感谢