簡體   English   中英

如何順序讀取目錄中的所有文件並以Python導出內容?

[英]How to sequentially read all the files in a directory and export the contents in Python?

我有一個目錄/directory/some_directory/ ,在該目錄中有一組文件。 這些文件以以下格式命名:例如, <letter>-<number>_<date>-<time>_<dataidentifier>.log

ABC1-123_20162005-171738_somestring.log
DE-456_20162005-171738_somestring.log
ABC1-123_20162005-153416_somestring.log
FG-1098_20162005-171738_somestring.log
ABC1-123_20162005-031738_somestring.log
DE-456_20162005-171738_somestring.log

我想讀取這些文件的子集(例如,僅讀取名為ABC1-123*.log文件),並將其所有內容導出到單個csv文件(例如, output.csv ),即將從單個文件中收集所有數據的CSV文件。

到目前為止,我已經編寫了以下代碼:

#!/usr/bin/env python

import os
file_directory=os.getcwd()

m_class="ABC1"
m_id="123"
device=m_class+"-"+m_id


for data_file in sorted(os.listdir(file_dir)):
    if str(device)+"*" in os.listdir(file_dir):
        print data_file

我不知道如何僅讀取過濾文件的子集,也不知道如何將其導出到常見的csv文件。

我該如何實現?

只需使用re lib來匹配文件名模式,然后使用csv lib即可導出。

根據您當前的代碼片段,可以更好地陳述您的問題,我假設您要:

  1. 根據全局模式過濾目錄中的文件。
  2. 將它們的內容連接到名為output.csv的文件中。

在python中,您可以使用glob列出文件名來實現(1.)。

import glob

for filename in glob.glob('foo*bar'):
    print filename

這將打印當前目錄中所有以foo開頭和以bar結尾的文件。

對於(2.),您只需使用python的內置函數open()讀取文件並將其內容寫入所需的輸出即可:

open('filename', 'r')

(使用'r'作為您要求python打開文件進行“讀取”的模式,使用'w'您要求python打開文件進行“寫入”。)

最終代碼如下所示:

import glob
import sys

device = 'ABC1-123'
with open('output.csv', 'w') as output:
    for filename in glob.glob(device+'*'):
        with open(filename, 'r') as input:
            output.write(input.read())

您可以使用os模塊列出文件。

import os

files = os.listdir(os.getcwd())

m_class = "ABC1"
m_id = "123"
device = m_class + "-" + m_id
file_extension = ".log"

# filter the files by their extension and the starting name
files = [x for x in files if x.startswith(device) and x.endswith(file_extension)]

f = open("output.csv", "a")
for file in files:
    with open(file, "r") as data_file:
        f.write(data_file.read())
    f.write(",\n")

f.close()

只有幾處調整,您已經接近

filesFromDir = os.listdir(os.getcwd())    

fileList = [file for file in filesFromDir if file.startswith(device)]

f = open("LogOutput.csv", "ab")
for file in fileList:
    #print "Processing", file
    with open(file, "rb") as log_file:
        txt = log_file.read()
        f.write(txt)
    f.write("\n")

f.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM