簡體   English   中英

從一個目錄加載所有csv / txt文件並通過python合並它們

[英]Load all csv/txt files from one directory and merge them via python

我有一個文件夾,其中包含數百個(可能超過1 k)的csv數據文件,按時間順序排列。 理想情況下,這些數據將在一個csv中,以便我可以一次性分析它。 我想知道的是,有沒有辦法使用python將所有文件相互附加。

我的文件存在於文件夾位置,如下所示:

C:\Users\folder\Database Files\1st September
C:\Users\folder\Database Files\1st October
C:\Users\folder\Database Files\1st November
C:\Users\folder\Database Files\1st December
etc

在每個文件夾中有3個csv(我使用術語csv松散,因為這些文件實際上保存為包含由管道分隔的值的.txt文件|

讓我們說這些文件被稱為:

MonthNamOne.txt
MonthNamTwo.txt
MonthNameOneTwoMurged.txt

我怎么樣,甚至可以編寫一些東西來遍歷這個目錄中的所有這些文件夾,然后將所有OneTwoMurged.txt文件合並在一起?

對於.csv后綴的文件夾中的所有文件

import glob
import os

filelist = []

os.chdir("folderwithcsvs/")
for counter, files in enumerate(glob.glob("*.csv")):
    filelist.append(files)
    print "do stuff with file:", files, counter

print filelist

for fileitem in filelist:
    print fileitem

顯然,“做東西部分”取決於你想要對文件做什么,這看起來正在獲取你的文件列表。

如果您希望每月對文件執行某些操作,則可以使用日期時間並創建可能的月份,相同的日期或年度數據。

例如,對於名稱為Month Year.csv月度文件,它將查找每個文件。

import subprocess, datetime, os

start_year, start_month = "2001", "January"

current_month = datetime.date.today().replace(day=1)
possible_month = datetime.datetime.strptime('%s %s' % (start_month, start_year), '%B %Y').date()
while possible_month <= current_month:
    csv_filename = possible_month.strftime('%B %Y') + '.csv'
    month = possible_month.strftime('%B %Y').split(" ")[0]
    year = possible_month.strftime('%B %Y').split(" ")[1]
    if os.path.exists("folder/" + csv_filename):
        print csv_filename
    possible_month = (possible_month + datetime.timedelta(days=31)).replace(day=1)

顯然你可以改變它,不管你覺得合適,如果你需要更多,或者如果這就足夠了,請告訴我。

這將遞歸處理目錄,匹配特定文件模式以進行處理,並附加已處理文件的結果。 這也將解析csvs,因此您也可以進行單獨的行分析和處理。 根據需要修改:)

#!python2
import os
import fnmatch
import csv
from datetime import datetime as dt

# Open result file
with open('output.txt','wb') as fout:
    wout = csv.writer(fout,delimiter='|')

    # Recursively process a directory
    for path,dirs,files in os.walk('files'):

        # Sort directories for processing.
        # In this case, sorting directories named "Month Year" chronologically.
        dirs.sort(key=lambda d: dt.strptime(d,'%B %Y'))
        interesting_files = fnmatch.filter(files,'*.txt')

        # Example for sorting filenames with a custom chronological sort "Month Year.txt"
        for filename in sorted(interesting_files,key=lambda f: dt.strptime(f,'%B %Y.txt')):

            # Generate the full path to the file.
            fullname = os.path.join(path,filename)
            print 'Processing',fullname

            # Open and process file
            with open(fullname,'rb') as fin:
                for line in csv.reader(fin,delimiter='|'):
                    wout.writerow(line)

讀入pandas數據幀(軸的選擇取決於您的應用程序),我的示例添加了相同長度的列

import glob
import pandas as pd


df=pd.DataFrame()
for files in glob.glob("*.csv"):
    print files 
    df = pd.concat([df,pd.read_csv(files).iloc[:,1:]],axis=1)

axis = 0將按行添加

暫無
暫無

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

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