5

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

"['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']"

.....例如,我只给出了 2 个列表,但总共有 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()

错误:列表不属性写入。

4

5 回答 5

10

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

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

这只会将每一行写入每个文件。查找我用来进行索引的枚举函数。

完成此操作后,您仍然需要编写解析逻辑以将每一行转换为一系列行...我不会在这里为您执行此操作,因为您的原始代码也没有真正的逻辑。

于 2012-12-10T10:41:30.260 回答
1

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

for file in f:
   file.write(value)
于 2012-12-10T10:37:58.230 回答
1

您不能让 python 在列表类中查找 write 对象作为列表理解中的可迭代对象。该列表与 write() 方法不兼容。在 python 列表中附加。

假设您的数据文件中已经有新行,请创建一个过滤器对象以删除空白行,然后迭代:

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

pythonic简单的方法:

for i, line in enumerate(file):
    fi = open("input_%s.data" % i, 'w')
    fi.write(line)
fs.close()
于 2018-01-28T20:25:31.433 回答
0

我假设您要读取 196 个文件,然后将数据(经过一些修改)写入新的 196 个文件。如果你使用 map 和 reduce(函数式编程),它可以做你想做的事。尽管在问题中没有太多解释,但我无能为力。

def modify(someString):
    pass # do processing

def newfiles(oldfilename): return '%s.new.txt'%(oldfilename) # or something 

filenames = ('a', 'b', 'c', 'd', ....) 
handles = [(open(x, 'r'), open(newfile(x), 'w')) for x in filenames] # not using generator
tmp = [y[1].write(modify(y[0].read())) for y in handles) 
于 2012-12-10T10:37:34.080 回答
0

我认为这就是你要找的:

with open("/home/vidula/Desktop/project/ori_tri/inpt.data","r") as fn:
    listLines = fn.readlines()

for fileNumber, line in enumerate(listLines):
    with open("/home/vidula/Desktop/project/ori_tri/input{0}.data".format(fileNumber), "w") as fileOutput:
        fileOutput.write(line)
于 2012-12-10T10:45:22.880 回答