0

我有一个包含三行的文本文件。我想将这三行读作 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。提前致谢!

4

5 回答 5

1

你可以:

  • 使用 try-catch IOError 添加异常处理,以解决打开文件和读取文件的任何问题。请参阅错误和异常教程- 或with按照其他答案的建议使用更新版本的 Python 的语句。
  • 使用 try-catch IndexError 添加异常处理以处理没有提供足够参数的情况。
  • 为简洁起见,使用 string.rstrip 或 string.strip 检查换行符。
  • 按照其他答案的建议将值存储在数组中(您可能希望在 3 行后终止,以防您得到错误的文件并最终将一个非常大的文件读入内存)。
于 2013-09-27T06:26:18.883 回答
1

这个怎么样:

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

但你真的应该使用列表......

于 2013-09-27T06:38:12.310 回答
0

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

于 2013-09-27T06:15:03.237 回答
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)

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

于 2013-09-27T06:15:29.093 回答
0

我在stackoverflow中搜索,发现了一个更简单的代码。它将内容保存到一个数组中:

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

如果你想去掉\n:

with open(fname) as f:
    content = [line.strip() for line in f]
于 2013-09-27T06:18:37.647 回答