如何将循环与列表项组合在一起

时间:2017-06-01 13:25:40

标签: python

我在列表中有一些名字,我想将这些名字与我在文本文件中的一些句子结合起来。

这是我的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)

4 个答案:

答案 0 :(得分:2)

文件打开后,你已经遍历了它,for line in f不再为你提供任何元素。

尝试添加with open('test.txt', mode = 'r+', encoding="utf=8") as f for y in name

更好的是,一次读取你的行并在之后添加名称,以减少程序的IO组件。

答案 1 :(得分: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)
>>> 

答案 2 :(得分:1)

当您说for line in f时,您正在消费来自文件句柄的数据。您应该存储数据,并多次迭代它。您可以说f.readlines()获取所有行,然后在循环中重复使用它们。

答案 3 :(得分: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: