AEA*_*AEA 4 python csv directory file python-2.7
我有一个文件夹,其中包含数百个(可能超过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
Run Code Online (Sandbox Code Playgroud)
在每个文件夹中有3个csv(我使用术语csv松散,因为这些文件实际上保存为包含由管道分隔的值的.txt文件|)
让我们说这些文件被称为:
MonthNamOne.txt
MonthNamTwo.txt
MonthNameOneTwoMurged.txt
Run Code Online (Sandbox Code Playgroud)
我怎么样,甚至可以编写一些东西来遍历这个目录中的所有这些文件夹,然后将所有OneTwoMurged.txt文件合并在一起?
Den*_*ian 12
对于带有.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
Run Code Online (Sandbox Code Playgroud)
显然,"做东西部分"取决于你想要对文件做什么,这看起来正在获取你的文件列表.
如果您希望每月对文件执行某些操作,则可以使用日期时间并创建可能的月份,相同的日期或年度数据.
例如,对于具有名称的月度文件,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)
Run Code Online (Sandbox Code Playgroud)
显然你可以改变它,不管你觉得合适,如果你需要更多,或者如果这就足够了,请告诉我.
这将递归处理一个目录,匹配特定的文件模式进行处理,并附加处理文件的结果。这也将解析 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5458 次 |
| 最近记录: |