Python:通过打开文件迭代

时间:2015-08-06 17:29:53

标签: python arrays fwrite

如果有人能指出我正确的方向,我会非常感激。我想替换以下内容:

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])

它们都需要不同名称的原因是因为所有文件必须一次打开而不关闭。这只是系统的要求。

有什么方法可以做到这一点吗?

5 个答案:

答案 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?

非常感谢