一次写入多个文件

2024-05-18 21:41:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含196个列表的文件,我想创建新的196个输出文件,并将每个列表写入一个新文件中,这样我将有196个输出文件,每个文件包含一个输入数据列表 以下是输入文件:

"['128,129', '116,118', '108,104', '137,141', '157,144', '134,148', '138,114', '131,138', '248,207', '208,247', '246,248', '101,106', '131,115', '119,120', '131,126', '138,137', '132,129']"
"['154,135', '151,147', '236,244', '243,238', '127,127', '125,126', '122,124', '123,126', '127,129', '122,121', '147,134', '126,132', '128,137', '233,222', '222,236', '125,126']"

……例如,我只给出了两个列表,但总共有196个列表。 输出应为:

文件1:

128,129
116,118
108,104

文件2:

154,135
151,147
236.244

当前代码:

fn = open("/home/vidula/Desktop/project/ori_tri/inpt.data","r")
fnew = fn.read()
fs = fnew.split('\n')
for value in fs:
    f = [open("/home/vidula/Desktop/project/ori_tri/input_%i.data" %i,'w') for i in range(len(list_of_files))]
    f.write(value)
    f.close()

错误:列表没有属性写入。


Tags: 文件projecthome列表fordatavalueopen
3条回答

你的f是一个文件列表,你必须遍历它:

for file in f:
   file.write(value)

在列表理解中,不能让python在list类中查找write对象作为iterable。列表与write()方法不兼容。在python中会附加列表。

假设数据文件中已有新行,则创建一个filter对象以删除空行,然后重复:

string1 = '128,129', '134, 167', '127,189'
string2 = '154, 134', '156, 124', '138, 196'
l1 = list(string1)
l2 = list(string2)
data = [l1, l2]
f = open("inpt.data", "w")
for val in data:
    f.write(str(val))
    f.write('\n')
f.close()

with open("inpt.data", "r", encoding='utf-8') as fs:
    reader = fs.read()
    file = reader.split('\n')
    file = filter(None, file)

最简单的方法:

# create one file for each list of data (1) on every new line 
i = 0
for value in file:
    i += 1
    f = open("input_%s.data" % i, 'w')
    f.write(value)
fs.close()

Python式的简单方法:

for i, line in enumerate(file):
    fi = open("input_%s.data" % i, 'w')
    fi.write(line)
fs.close()

您当前的代码正在将所有内容加载到内存中,这是非常不必要的,然后它在一个不合适的位置列出一个列表,因此出现错误。试试这个:

fn = open("/home/vidula/Desktop/project/ori_tri/inpt.data","r")
for i, line in enumerate(fn):
    f = open("/home/vidula/Desktop/project/ori_tri/input_%i.data" %i,'w')
    f.write(line)
    f.close()

这只会将每一行按原样写入每个文件。查找我用于索引的enumerate函数。

这样做之后,您仍然需要编写解析逻辑来将每一行转换成一系列行……我不打算在这里为您这样做,因为您的原始代码也没有真正的逻辑。

相关问题 更多 >

    热门问题