简体   繁体   English

使用python从目录中的所有.txt文件中获取行

[英]Get rows from all .txt files in directory using python

I have some txt files in a directory and I need to get the last 15 lines from all of them. 我的目录中有一些txt文件,我需要从所有这些文件中获取最后15行。 How could I do it using python? 我如何使用python做到这一点?

I chose this code: 我选择此代码:

from os import listdir
from os.path import isfile, join

dir_path= './'
files = [ f for f in listdir(dir_path) if isfile(join(dir_path,f)) ]
out = []
for file in files:
    filedata = open(join(dir_path, file), "r").readlines()[-15:]
    out.append(filedata)
f = open(r'./fin.txt','w')
f.writelines(out)
f.close()

but I get the error "TypeError: writelines() argument must be a sequence of strings". 但出现错误“ TypeError:writelines()参数必须是字符串序列”。 I think it's because of Russian letters in the lines. 我认为是因为行中有俄语字母。

import os
from collections import deque

for filename in os.listdir('/some/path'):
    # might want to put a check it's actually a file here...
    # (join it to a root path, or anything else....)
    # and sanity check it's text of a usable kind
    with open(filename) as fin:
        last_15 = deque(fin, 15)

deque will automatically discard the oldest entry and peak the max size to be 15, so it's an efficient way of keeping just the "last" 'n' items. deque将自动丢弃最旧的条目,并将最大大小的峰值设置为15,因此这是仅保留“最后” n个项的有效方法。

Try this: 尝试这个:

from os import listdir
from os.path import isfile

for filepath in listdir("/path/to/folder")
    if isfile(filepath): # if need
        last_five_lines = open(filepath).readlines()[-15:]

# or, one line:

x = [open(f).readlines()[-15:] for f in listdir("/path/to/folder") if isfile(f)]

Updated: 更新:

lastlines = []
for file in files:
    lastlines += open(join(dir_path, file), "r").readlines()[-15:]
with open('./fin.txt', 'w') as f:
    f.writelines(lastlines)
from os import listdir
from os.path import isfile, join

dir_path= '/usr/lib/something'
files = [ f for f in listdir(dir_path) if isfile(join(dir_path,f)) ]

for file in files:
    filedata = open(join(dir_path, file), "r").readlines()[-15:]
    #do something with the filedata

Hope this helps: 希望这可以帮助:

import os

current_dir = os.getcwd()
dir_objects = os.listdir(current_dir)
dict_of_last_15 = {}
for file in dir_objects:
    file_obj = open(file, 'rb')
    content = file_obj.readlines()
    last_15_lines = content[-15:]
    dict_of_last_15[file] = last_15_lines
    print "#############: %s" % file
    print dict_of_last_15[file]
    file_to_check.close()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM