查找长度大于500个字符的行的文件

时间:2017-09-19 19:46:13

标签: python file io

我需要一些帮助。我需要创建一个函数来解析文本文件,其中包含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的文件它根本就没有找到。有任何想法吗?

3 个答案:

答案 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

答案 1 :(得分: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

答案 2 :(得分:0)

  1. 您需要在for循环之前放置newlist = [],否则它会在每次迭代中被清空。
  2. 在第一个for循环完成后运行第二个for循环,以便在遍历它之前填充newlist
  3. 以下是建议编辑后代码的样子:

    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)