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

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()ところで、 2番目の例に示すように、でファイルを開きたくないでしょう。

于 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 に答える