如何在Python中仅使用一个循环来迭代文件?
我有一个包含以下数据的文件:如何在Python中仅使用一个循环来迭代文件?,python,Python,我有一个包含以下数据的文件: aaa97k:kkddd3046<br /> adfteak:xk666665<br /> ssyuri2:7r6669p<br /> k2fdf2k2:sgp54fa<br /> 我想去掉上面的部分 我发现了一个代码,它可以: def main(): fileR=open("data.txt","r") for line in (line.rstrip() for line in fileR):
aaa97k:kkddd3046<br />
adfteak:xk666665<br />
ssyuri2:7r6669p<br />
k2fdf2k2:sgp54fa<br />
我想去掉上面的部分
我发现了一个代码,它可以:
def main():
fileR=open("data.txt","r")
for line in (line.rstrip() for line in fileR):
if line.endswith('<br />'):
line=line[:-6]
print line
就我对这段代码的理解而言,内部循环遍历每一行并返回它们中的每一行,而不使用新行字符,对吗?然后,利用这些数据,它继续处理零件
我想知道是否有一种方法可以只使用一个循环而不需要使用rstrip来实现这一点?第二个循环只是一个生成器表达式。它基本上与实际循环并行运行;第一个循环的每次迭代只从第二个循环读取一个新值。这只是一种更奇特的写作方式
for line in fileR:
line = line.rstrip()
避免对第一行进行第二次赋值的更好方法是使用for循环本身
from itertools import imap
from operator import methodcaller
stripper = methodcaller("rstrip")
for line in imap(stripper, fileR):
您可以在每一行上循环,在“上拆分循环是一个生成器表达式;循环本身并不嵌套为链式 当然,您可以删除它并手动为换行符记帐。不过,你不会因此得到任何好处:
for line in fileR:
if line.endswith('<br />\n'):
line = line[:-7]
print line
现在,您需要测试该行是否以加号换行结束
请注意,如果文件中的最后一行没有换行,则上述代码将失败。str.rstrip不仅仅是一个换行符;如果文本后面有可变数量的空格,则上述代码也不会处理这些空格。如果需要包含行的原始文件,可以将它们存储在变量中,并对其执行进一步的操作 否则,如果您只是在读取时执行一些操作,那么rstrip应该合适。以下是脚本的较小版本:
with open('data.txt') as f:
for line in f:
print(line.rstrip('<br />')) # or do something else
# the with statement cloeses the file automatically
如果该行只包含一个字符,那么您现在也在无条件地打印该行;原始代码只打印了带有的行。我只是假设该文件看起来与提供的OP完全相同。谢谢,但当我执行它时,它不会打印任何内容;是的,每一行都以一个br加一个newline@Layla:您确定在输入后没有其他空格吗?
with open('data.txt') as f:
for line in f:
print(line.rstrip('<br />')) # or do something else
# the with statement cloeses the file automatically