【问题标题】:how to skip over lines of a file if they are empty如果文件为空,如何跳过文件的行
【发布时间】:2014-11-02 18:50:52
【问题描述】:

python 3 中的程序: 这是我第一个涉及文件的程序。我需要忽略注释行(以 # 开头)和空白行,然后拆分这些行以便它们可迭代,但我不断收到 IndexError 消息,指出字符串索引超出范围,并且程序在空白行上崩溃。

import os.path

def main():

endofprogram = False
try:
    #ask user to enter filenames for input file (which would 
    #be animals.txt) and output file (any name entered by user)
    inputfile = input("Enter name of input file: ")

    ifile = open(inputfile, "r", encoding="utf-8")
#If there is not exception, start reading the input file        
except IOError:
    print("Error opening file - End of program")
    endofprogram = True

else:
    try:     
        #if the filename of output file exists then ask user to 
        #enter filename again. Keep asking until the user enters 
        #a name that does not exist in the directory        
        outputfile = input("Enter name of output file: ")
        while os.path.isfile(outputfile):
            if True:
                outputfile = input("File Exists. Enter name again: ")        
        ofile = open(outputfile, "w")

        #Open input and output files. If exception occurs in opening files in 
        #read or write mode then catch and report exception and 
        #exit the program
    except IOError:
        print("Error opening file - End of program")
        endofprogram = True            

if endofprogram == False:
    for line in ifile:
        #Process the file and write the result to display and to the output file
        line = line.strip()
        if line[0] != "#" and line != None:
            data = line.split(",")
            print(data)                
ifile.close()
ofile.close()
main() # Call the main to execute the solution

【问题讨论】:

    标签: python file python-3.x comments strip


    【解决方案1】:

    您的问题来自于空行不是None,正如您所假设的那样。以下是可能的解决方法:

    for line in ifile:
        line = line.strip()
        if not line:  # line is blank
            continue
        if line.startswith("#"):  # comment line
            continue
        data = line.split(',')
        # do stuff with data
    

    【讨论】:

      【解决方案2】:

      只需将continue 语句与 if 结合使用:

      if not line or line.startswith('#'):
          continue
      

      如果 line 为 None、空或以 # 开头,这将进入下一次迭代(line)。

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-07
        相关资源
        最近更新 更多