读取文件并分别获取文件的每一行

时间:2013-09-27 06:12:18

标签: python

我有一个有三行的文本文件。 我想把这三行看成是 L1,L2和L3并计算字符数 L1,L2和L3为n1,n2和n3。我试过了 如下:

     f=open(sys.argv[1],'r')
     L1=f.readline()   
     L2=f.readline()   
     L3=f.readline()  
     if L1[-1]=='\n': L1=L1[:len(L1)-1] 
     if L2[-1]=='\n': L2=L2[:len(L2)-1] 
     if L3[-1]=='\n': L3=L3[:len(L3)-1] 
     n1=len(L1); n2=len(L2); n3=len(L3) 
     print L1, n1, L2, n2, L3, n3

上面的脚本运行正常。但我想知道是否有更好/更容易 获得L1,L2和L3的方法。提前谢谢!

5 个答案:

答案 0 :(得分:1)

你可以:

  • 使用try-catch IOError添加异常处理,以解决打开文件并从中读取的任何问题。请参阅Errors and Exceptions Tutorial - 或使用with语句获取其他答案所建议的较新版本的Python。
  • 使用try-catch IndexError添加异常处理,以处理没有给出足够参数的情况。
  • 为了简洁起见,使用string.rstrip或string.strip检查换行符。
  • 按照其他答案的建议将值存储在数组中(如果得到错误的文件并最终将非常大的文件读入内存,则可能需要在3行后终止。)

答案 1 :(得分:1)

这个怎么样:

with open(sys.argv[1]) as f:
  L1, L2, L3 = (line.rstrip() for line in f.readlines()[:3])

但你真的应该使用清单......

答案 2 :(得分:0)

我认为最好的方法是尝试将它们放在一个数组中。我不使用python,但这就是c ++中的错误。

答案 3 :(得分:0)

确定..

lines = []
with open(sys.argv[1], "r") as file:
    for line in file.readlines():
        if line[-1] == "\n":
            line = line[:-1]
        lines.append(line)

这样,文件中有多少行并不重要。你的程序仍然会运行到最后

答案 4 :(得分:0)

我在stackoverflow搜索并找到了更简单的代码。 它将内容保存到数组中:

with open(fname) as f:
    content = f.readlines()

如果要剥离\ n:

with open(fname) as f:
    content = [line.strip() for line in f]