繁体   English   中英

如何在 python 3.8 中的文本文件的所有行中循环“for”循环?

[英]How do I make the “for” loop cycle through all lines of a text file in python 3.8?

我有一个包含多行文本的文本文件“abc.txt”。 我正在尝试计算并列出 txt 文件中每个字母 a 到 z 的出现频率。

在下面的代码中,在正确检查字母“a”后,它返回 0 作为从“b”开始的字母表的 rest 的计数。 一旦为字母“a”执行了“for”循环,对于后续的字母,我如何让它再次循环回到文本的开头?

with open(r"C:\Users\username\Downloads\abc.txt","r") as x:
    for j in "abcdefghijklmnopqrstuvwxyz":
        n = 0
        for i in x:
            y = i.count(j)
            n += y
        print(n)

这是因为一旦您读取了整个文件,“指针”或“光标”现在位于文件末尾,没有更多行可读取,因此检查的 rest 以 0 结尾。

要解决此问题,请使用seek() function 在外部 for 循环的每个循环之后将 cursor 移回文件顶部:

import os

with open(r"C:\Users\username\Downloads\abc.txt","r") as x:
    for j in "abcdefghijklmnopqrstuvwxyz":
        n = 0
        for i in x:
            y = i.count(j)
            n += y
        print(n)
        x.seek(0, os.SEEK_SET)

编辑:

在计数之前可能值得将每一行都设为小写:

y = i.lower().count(j)

您的文件句柄x在迭代后是一个耗尽的迭代器。 在每个计数循环之后,您必须将其重置为文件的开头。 但是在一次迭代中计算所有字母会更有效:

from collections import Counter

cnt = Counter()
with open(r"C:\Users\username\Downloads\abc.txt","r") as x:
    for i in x:
        cnt.update(i)
for j in "abcdefghijklmnopqrstuvwxyz":
    print(cnt[j])

尝试:

count = {}
with open(r"C:\Users\username\Downloads\abc.txt","r") as x:
    srt = x.read()
    for i in srt:
        if i not in count:
            count[i] = srt.count(i)
            srt.replace(i,'')

第一次使用for i in x循环遍历文件后,文件已用尽。 for i in x根本不会运行。

与其直接迭代文件,不如将文件内容加载到可以重复检查的变量中。

此外,看起来您实际上不需要逐行扫描文件; 您可以一步检查整个文件内容。

试试这个代码:

with open(r"C:\Users\username\Downloads\abc.txt","r") as x:
    text = x.read()

for letter in "abcdefghijklmnopqrstuvwxyz":
    frequency = text.count(letter)
    print(frequency)

您可以为此使用Counter

from collections import Counter
from string import ascii_lowercase


c = Counter()
letters = set(ascii_lowercase)
with open(r"C:\Users\username\Downloads\abc.txt","r") as f:
    c.update(letter for line in f for letter in line if letter in letters)

您不需要为每个字母扫描整个文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM