2017-03-04 74 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) 
相關問題