我在列表中有一些名字,我想将这些名字与我在文本文件中的一些句子结合起来。
这是我的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)
答案 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: