2017-03-04 77 views
-2

我有一个文本文件需要逐行分隔成单独的文本文件。因此,如果主文件包含字符串:在文件写入行中的每一行到python中的单个文件

foo 
bar 
bla 

我有3个文件,这在数值上的1.txt命名(包含字符串“foo”),2.txt(sontaining字符串“bar”)和3.txt(包含字符串“bla”)

直接的方法是打开三个文件,逐行写入每个文件。但问题是我们有很多线路,或者我们不知道有多少线路。这似乎痛苦没有必要必须创建

f1=open('main_file', 'r') 
f2=open('1.txt', 'w') 
f3=open('2.txt', 'w') 
f4=open('3.txt', 'w') 

有没有把这个操作的计数器或可处理这种类型的问库的方法吗?

回答

2

在循环中读取文件中的行,保持行号;打开与行数得出名的文件,并写入行到文件:

f1 = open('main_file', 'r') 
for i,text in enumerate(f1): 
    open(str(i + 1) + '.txt', 'w').write(text) 
+0

正是我所期待的!我谢谢你! – badner

0

首先,你可以读取文件到一个列表,其中每个元素代表在文件中的行。

with open('/path/to/data','r') as f: 
    data = [line.strip() for line in f] 

然后你可以使用for循环来分别写入文件。

for counter in range(len(data)): 
    with open('/path/to/file/'+str(counter),'w') as f: 
     f.write(data[counter]) 

注: 既然你不断开放大量文件,我强烈建议使用

with open() as f: 
    #your operation 

使用这是可以确保的Python发布时间资源的优势。 详情: What's the advantage of using 'with .. as' statement in Python?

+1

无需将文件的内容实现为列表,只需直接遍历行即可。 –

2

你会想这样的事情。使用with是处理文件的首选方式,因为它会在with作用域后自动关闭它们。

with open('main_file', 'r') as in_file: 
    for line_number, line in enumerate(in_file): 
    with open("{}.txt".format(i+1), 'w') as out_file: 
     out_file.write(line) 
相关问题