2017-06-01 59 views
0

我在列表中列出了一些名稱,我想將這些名稱與我在文本文件中的一些句子結合起來。如何將循環與列表項目結合起來

這是我的test.txt,它包含以下內容:

This is line 1 
This is line 2 
This is line 3 

這是我的代碼的文本文件和列表項

name = ['anjana','ashish','dilip','gaurav','grishma','hira','ishika','manoj', 
     'muna'] 
x=1 


with open('test.txt', mode = 'r+', encoding="utf=8") as f: 

for y in name: 
    for line in f: 
     if line.rstrip(): 
      line_strip = line.strip() 
      tag_strip = '<s> ' + line.strip() +' </s>' 
      subject = str(name[0]) 
      tag_end = ' (' + subject +'_'+ str(x).zfill(2) +')' 
      print (tag_strip +tag_end) 


      x = x+1 

與此結合我可以得到想要的結果只有列表中的第一項。它不重複通的所有項目

<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 

我所尋找的是

<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 
.......... so on until 
<s> This is line 1 </s> (muna_01) 
<s> This is line 2 </s> (muna_02) 
<s> This is line 3 </s> (muna_03) 

回答

1

有幾個問題。您可以繼續使用seek()方法在每次迭代後將光標移動到文件的開頭。其次,您只使用name列表中的第一個元素,而不是使用變量y。這有最必要的改進:

name = ['anjana','ashish','dilip','gaurav','grishma','hira','ishika','manoj', 
     'muna'] 
x=1 


with open('test.txt', mode = 'r+') as f: 

for y in name: 
    for line in f: 
     if line.rstrip(): 
      line_strip = line.strip() 
      tag_strip = '<s> ' + line.strip() +' </s>' 
      subject = str(y) 
      tag_end = ' (' + subject +'_'+ str(x).zfill(2) +')' 
      print (tag_strip +tag_end) 
    f.seek(0, 0) 

請注意正確的行格式。沒有人每個縮進使用一個空格。用4代替。和更多的描述性名稱,如

names = ['anjana', 'ashish', ...] 
(...) 
for name in names: 
+0

嘿謝謝!我將'x = 1'移動到了'name'的下面'',並且在'print(tag_strip + tag_end)'之後加了'x = x + 1''。正是我需要的。我不知道任何**尋找**。將研究它。再次感謝! – choman

+0

很高興我能幫忙:) – gonczor

2

文件打開後你通過它迭代和for line in f不給你任何更多的元素。

嘗試把with open('test.txt', mode = 'r+', encoding="utf=8") as ffor y in name

更妙的是,讀你的行一次,事後添加的名字,以減少程序的IO組件。

1

當你說for line in f你是消費來自文件句柄的數據。你應該存儲的數據,並重復多次。你可以說f.readlines()得到所有的行,然後重複使用它們在你的循環中。

2

試試下面的辦法:

>>> txtdata = """This is line 1 
... This is line 2 
... This is line 3""" 
>>> 
>>> name = ['anjana','ashish','dilip','gaurav','grishma','hira','ishika','manoj','muna'] 
>>> 
>>> result = [] 
>>> 
>>> for i in name: 
...  for idx, data in enumerate(txtdata.splitlines(), 1): 
...    result.append('<s> ' + data + ' </s>' + ' (' + i + '_0' + str(idx) + ')') 
... 
>>> for i in result: 
...  print(i) 
... 
<s> This is line 1 </s> (anjana_01) 
<s> This is line 2 </s> (anjana_02) 
<s> This is line 3 </s> (anjana_03) 
... 
... 
<s> This is line 1 </s> (muna_01) 
<s> This is line 2 </s> (muna_02) 
<s> This is line 3 </s> (muna_03) 
>>> 
+0

這個答案是正確的,雖然更消耗內存。 – gonczor

+0

@gonczor,是的,你是對的,因爲他只是打印出來。而我將結果存儲在一個列表中,然後將其打印出來,這是一個應用程序的問題。 – JkShaw

相關問題