繁体   English   中英

python 2.7文件难度

[英]python 2.7 difficulty with files

我试图创建一个计算动物数量(熊,狼等)并将它们变成变量的程序。

这不起作用

import os
def count_species():
    sal_count = 0
    tro_count = 0
    filename1 = animals.txt
    if os.path.exists(animals.txt):
        f = open(filename1, 'r')
        for line in f:#will execute each line in the file individually
            if line == 'Salmon':
                sal_count +=1
            if line == 'Trout':
                tro_count += 1

由于某种原因,程序没有注册第一行== Salmon。 其他一切似乎都有效。 该文件的示例如下所示

Salmon
Trout
Salmon

到底是怎么回事?

您正在读取文件,并迭代文件的行并检查:

if line == 'Salmon':
    ....
if line == 'Trout':
    ....

该行可能不一定是这样,它可能在末尾有换行符(它将在这里)。 读取文件并删除换行符。

一种方法:

with open(path to file, "r") as f:
     lines = [x.strip() for x in f]
     ....

您也永远不会关闭该文件。 使用上下文管理器,您不必担心关闭它为您处理的所有内容。

此外,您可能不希望在此处使用两个if语句。

您可能看不到它们,但是您的第一行不完全是字符串Salmon ,因为它还包含您按下的新行 (或“\\ n” ),例如,ENTER。

使用strip()从字符串中删除空格(包括换行符 ),在您的情况下,该字符串是line 更改以下内容:

if line == 'Salmon':
    ...
if line == 'Trout':
    ...

if line.strip() == 'Salmon':
    ...
if line.strip() == 'Trout':
    ...

同样@Pythonista说,总是关闭你的文件。 在末尾添加类似f.close()的东西with open("filename.txt", "r") as f: ...或者with open("filename.txt", "r") as f: ...

你可以看看该行中是否存在该单词。

if 'Salmon' in line:
    sal_count +=1
if 'Trout' in line:
    tro_count += 1

暂无
暂无

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

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