我可以根据部分文件名导入.csv文件吗?

时间:2016-07-11 17:05:51

标签: python csv pandas

所以我需要处理的数据是一组10个.csv文件,每个文件都有以下格式的名称:

Example_datatype_date_IDnumber.csv

10个文件中的每一个都需要不同的操作/分析,我想用一个python脚本完成所有操作。我可以用pandas成功做到这一点,但问题是每次我得到一个新的设置时我必须进入并在导入文件时手动更改文件名中的日期和ID号。有没有办法导入文件并忽略日期和ID号(仅根据数据类型区分)?我只想为每组10创建一个新的文件夹/目录。

3 个答案:

答案 0 :(得分:1)

如果您将所有文件放在一个文件夹中(假设为c:\ tmp),则可以使用正则表达式和glob来查找所有文件:

import glob 
path = r"c:\\tmp\\*.csv"
for filePath in glob.glob(path):
    # read file and analysis file

import re
import os
pattern  = r'\w+_\w+_\w+_\w+\.csv'
for i in os.listdir("c:\\tmp\\"):
  if re.search(pattern,i):
    # read file and analysis file

答案 1 :(得分:0)

您可以使用正则表达式从文件名中检测数据类型:

import os, re

files = os.listdir("my_directory")

for fname in files:
    m = re.search('[^_]+_([^_]+).*\csv', fname)
    if m:
        datatype = m.group(1)
        print fname
        print datatype

答案 2 :(得分:0)

import os, re

path_containing_csv_files = '/tmp/test' #contains < example_int_12-12-16_1.csv, example_string_11-12-16_2.csv>

def process_int(filepath):
    #process int data here
    pass

def process_string(filepath):
    #process string data here
    pass

methods = {'int':process_int,
           'string':process_string}

for file_name in os.listdir(path_containing_csv_files):
    parsed = re.search('[^_]+_([^_]+).*\csv', file_name))
    if parsed:
        methods[parsed.group(1)](os.path.join(path_containing_csv_files, file_name))