Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中仅使用一个循环来迭代文件?_Python - Fatal编程技术网

如何在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