2017-06-01 70 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

相关问题