2017-09-19 89 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

放'newlist = []'之前主要用於循環,再加上,我想你需要運行第二個for循環,當第一完成 – MedAli

+0

定義「字符」。它可能意味着:字節,代碼單元,代碼點,傳統字形集羣,擴展字形集羣,字形,... – o11c

+0

這實際上工作,謝謝@MedAli –

回答

0
  1. 你需要把newlist = []前的for循環,否則它在每次迭代中得到清空。
  2. 在第一個完成後運行第二個循環,以便在遍歷它之前填充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: 
    ... 

,但如果你想要的線長爲我編輯,因爲它是在這個問題標題中提到與其他方法去(其實你是確定)

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如果可以的話,只要閱讀問題,任何地方都說文件的行長超過500? – Serjik

+0

是的,它在標題中。另外,我沒有倒下。 –

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 
相關問題