2017-09-19 7 views
0

私はいくつかの助けが必要です。 500文字以上の行のテキストファイルを解析する関数を作成する必要があります。私が書いたコードは以下の通りです:長さが500文字を超えるファイルを検索する

import os 
from os.path import join 
place = raw_input('Enter path: ') 
for f in os.listdir(place): 
    newlist = [] 
    if f.endswith(".txt"): 
      newlist.append(f) 
    for i in newlist: 
     with open(join(place, i)) as fi: 
      for line in fi: 
       if len(line) > 350: 
        print(place, i) 

だから、アイデアは長さがしかし500以上であれば、ファイルの場所とファイルの名前を印刷することで、それはそれをやっているようには見えません、私は700を超えるファイルを知っているので、それは単に見つからないだけです。何か案は?

+0

は、私はあなたが最初に終了 – MedAli

+0

は「文字」を定義したときにループのための第二を実行する必要があると思い、newlist = [] 'ループのメインの前に'入れ、プラス。バイト、コードユニット、コードポイント、レオメントクラスプクラスター、拡張されたグラフェンクラスター、グリフ、などを意味します。 – o11c

+0

実際に働いたのはありがとう@MedAli –

答えて

0
  1. okです。
  2. 最初のループが終了した後に2回目のforループを実行し、反復処理を行う前にnewlistが入力されるようにします。ここで

は、コードが提案された編集後のように見える方法は次のとおりです。

import os 
from os.path import join 
place = raw_input('Enter path: ') 

newlist = [] 

for f in os.listdir(place): 
    if f.endswith(".txt"): 
      newlist.append(f) 

for i in newlist: 
    with open(join(place, i)) as fi: 
     for line in fi: 
      if len(line) > 350: 
       print(place, i) 
0

最初に質問の説明

import os 
b = os.path.getsize("/path/filename.fileextension") 
if len(b) > 500: 
    ... 

で述べたように、これは、ファイルのサイズを取得しますが、私は編集したとして、あなたが行の長さが必要な場合は、それが、質問のタイトルに言及されているように(他のアプローチで行く、実際にあなたのものあなたはそれ以外の場合は、各反復で空になってきループの前にnewlist = []を配置する必要があります)

with open("/path/filename.ext") as f: 
    for line in f: 
    if len(line) > 500: 
     ... 
     # Where you can do it 
+0

これはOPが探しているものではありません。彼らは500以上の長さの行を持つファイルを探したいのですが、合計サイズは500ではありません。 –

+0

@COLDSPEEDはできるだけ問題を読んでいます。 – Serjik

+0

ええ、タイトルにあります。また、私はdownvoteしませんでした。 –

1

これは、各ラインの長さの累積カウントを保持します。これが350を超えると、ファイル名が結果のリストに追加され、検索が続行されます。

import os 

place = raw_input('Enter path: ') 
text_files = [f for f in os.listdir(place) if f.endswith('.txt')] 
results = [] 
for f in text_files: 
    with open(os.path.join(place, f)) as fin: 
     count = 0 
     for line in fin: 
      count += len(line) 
      if count > 350: 
       results.append(f) 
       break 
関連する問題