2

我 3 周前刚开始学习 python,如果这真的很基础,我很抱歉。我需要打开一个 .txt 文件并打印文件中最长的代码行的长度。我刚刚创建了一个名为 myfile 的随机文件并将其保存到我的桌面。

myfile= open('myfile', 'r')
line= myfile.readlines()
len(max(line))-1 
#the (the "-1" is to remove the /n)

这段代码正确吗?我把它放在解释器中,它似乎工作正常。

但我弄错了,因为显然我应该使用 while 循环。现在我想弄清楚如何把它放在一个while循环中。我已经阅读了 python.org 上的内容,观看了 youtube 上的视频并浏览了这个网站。我只是不明白。给出的示例如下:

import os
du=os.popen('du/urs/local')
while 1:
   line= du.readline()
   if not line:
        break
   if list(line).count('/')==3:
         print line,
4

6 回答 6

3
print max([len(line) for line in file(filename).readlines()])
于 2012-09-13T08:43:03.397 回答
1

拿走你所拥有的,去掉你不需要的部分

myfile = open('myfile', 'r')
max_len = 0
while 1:
    line = myfile.readline()
    if not line:
        break
    if len(line) # ... somethin
        # something

请注意,这是循环文件的糟糕方法。它依赖于文件末尾有一个空行。但功课就是功课...

于 2012-09-13T09:13:35.737 回答
0
max(['b','aaa']) is 'b'

这个字典顺序不是你想要最大化的,你可以使用key标志来选择一个不同的函数来最大化,比如len.

max(['b','aaa'], key=len) is 'aaa'

所以解决方案可能是:len ( max(['b','aaa'], key=len) is 'aaa' ).

更优雅的解决方案是使用列表推导:

max ( len(line)-1 for line in myfile.readlines() )

.

顺便说一句,您应该使用 with 语句附上打开文件,这将担心在缩进块之后关闭文件:

with open('myfile', 'r') as mf:
    print max ( len(line)-1 for line in mf.readlines() )
于 2012-09-13T08:49:33.490 回答
0

正如其他人所提到的,您需要找到具有最大长度的行,这意味着给max()函数一个key=参数以从您传递的列表中的每一行中提取它。

同样,在 while 循环中,您需要读取每一行并查看其长度是否大于您迄今为止看到的最长的,您可以将其存储在一个单独的变量中并在循环之前初始化为 0。

顺便说一句,您不想打开文件,os.popen()如第二个示例所示。

于 2012-09-13T08:50:04.210 回答
0

我认为如果我们保持简单的话会更容易理解:

max_len = -1 # Nothing was read so far
with open("filename.txt", "r") as f:   # Opens the file and magically closes at the end
  for line in f:
    max_len = max(max_len, len(line))
print max_len

因为这是家庭作业......我会问自己是否应该计算换行符。如果您需要切掉最后一个字符,请将 len(line) 更改为 len(line[:-1])。

如果你必须使用while,试试这个:

max_len = -1 # Nothing was read
with open("t.txt", "r") as f:   # Opens the file
   while True:
      line = f.readline()
      if(len(line)==0):
         break
      max_len = max(max_len, len(line[:-1]))
print max_len
于 2012-09-13T09:51:49.083 回答
0

对于那些仍然需要的人。这是一个小功能,可以满足您的需求:

def get_longest_line(filename):
    length_lines_list = []
    open_file_name = open(filename, "r") 
    all_text = open_file_name.readlines()
    for line in all_text:
        length_lines_list.append(len(line))
    max_length_line = max(length_lines_list)
    for line in all_text:
        if len(line) == max_length_line:
            return line.strip()
    open_file_name.close()
于 2015-05-06T09:39:19.957 回答