用python 3读写文件

2024-10-01 15:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

import os.path

endofprogram=False
try:

   filename1=input("Enter input file: ")
   filename2=input("Enter output file: ")

   while os.path.isfile(filename2):
       filename2=input("File Exists! Enter new name for output file: ") 

except IOError:
   print("Error opening file - End of program")
   endofprogram=True

if(endofprogram == False):
   infile=open(filename1, "r")
   content=infile.read()
   lines=[]
   words=[]

   lines=content.split('\n')
   print("Total animals=",len(lines))  

我已经在这个程序上工作了很多年了。我有一个文件:

#color     size    flesh     class
brown     large    hard      safe
green     large    hard      safe
red       large    soft      dangerous
green     large    soft      safe


red       small    hard      safe
red       small    hard      safe
brown     small    hard      safe
green     small    soft      dangerous
green     small    hard      dangerous
red       large    hard      safe
brown     large    soft      safe
green     small    soft      dangerous
red       small    soft      safe
red       large    hard      dangerous
red       small    hard      safe
green     small    hard      dangerous 

我应该回答以下问题:

  • 动物总数?
  • 危险动物总数?
  • 安全的大型动物数量?
到目前为止,我可以打印出动物总数,但它包括空白空间和注释线,我不想要。目前对于动物总数来说,印出来的是19只,而应该是16只。我不知道从那之后的两个问题开始。


Tags: inputgreenredfilesafesmallsoftlarge
3条回答

这里有一个相当冗长的方法:

color, size, flesh, clas = 0, 1, 2, 3 #column index
animals = []
with open ('animals.txt') as f:
    for line in f:
        if line[0] in '#\n': continue
        animals.append(line.split())
print(animals)
print(len(animals))
print(sum(1 for animal in animals if animal[clas] == 'dangerous'))
print(sum(1 for animal in animals if animal[clas] == 'safe' and animal[size] == 'large'))

说明:遍历所有行。如果行是空的或注释,请跳过它。否则就把线分成两半,把它加到所有的动物身上。每种动物都是一个由四个元素组成的列表(因此列索引在第一行)。现在只需过滤并计数匹配的动物。

您应该逐行处理文件,这比读取整个文件更容易,例如:

infile = open('entrada', 'r')

animals = 0
safe_animals = 0
dangerous_animals = 0

for line in infile:
    line_components = line.strip().split()
    if line_components:
        animals += 1

        if line_components[3] == 'dangerous':
            dangerous_animals += 1
        elif line_components[3] == 'safe' and line_components[1] == 'large':
            safe_animals += 1

print "%i animals" % animals
print "%i safe animals" % safe_animals
print "%i dangerous animals" % dangerous_animals

与其一次读取所有内容,然后拆分content,不如对文件对象使用readlines()方法,如下所示:

lines = infile.readlines()

然后可以进行一些筛选,以便在分析列之前删除注释行和/或空行。

例如列表理解lines = [line for line in lines if len(line.strip()) > 0]。您可以执行类似的操作来删除注释行。

split方法更适合于实际分析每一行。

相关问题 更多 >

    热门问题