在python中读取和压缩过去14天的csv文件

在python中读取和压缩过去14天的csv文件,python,pandas,csv,dataframe,concatenation,Python,Pandas,Csv,Dataframe,Concatenation,我需要编写一个脚本,读取过去14天(每天早上)所有具有特定名称的csv文件,但当我进行concat时,这会给我一个小立方体(在jupyter笔记本中),而这个符号没有任何内容 def get_local_file(pdate, hour, path='/data/'): """Get date+hour processing file from local drive :param pdate: str Processing date :param

我需要编写一个脚本,读取过去14天(每天早上)所有具有特定名称的csv文件,但当我进行concat时,这会给我一个小立方体(在jupyter笔记本中),而这个符号没有任何内容

def get_local_file(pdate, hour, path='/data/'):
        """Get date+hour processing file from local drive

       :param pdate: str Processing date
        :param hour: str Processing hour
        :param path: str Path to file location
        :return: Pandas DF Retrieved DataFrame
        """

        sdate = pdate + '-' + str(hour)
        for p_file in os.listdir(path):
            if fnmatch.fnmatch(p_file, 'ABC_*'+sdate+'*.csv'):
                return path+p_file

def get_files(pdate, path='/data/'):
    hours = [time(i).strftime('%H') for i in range(24)]
    fileList=[]
    for hour in hours:
        fileList.append(get_local_file(pdate, hour))
    return fileList

end_datetime = datetime.combine(date.today(), time(0, 0, 0))
proc_datetime = end_datetime - timedelta(days=14)
while proc_datetime <= end_datetime:
    proc_datetime += timedelta(days=1)
    a = get_files(str(proc_datetime.date()).replace('-', '_'))
    frame = pd.DataFrame()
    list_ = []
    for file_ in a:
        if file_ != None:
            df = pd.read_csv(file_,index_col=None, header=0, delimiter=';')
            list_.append(df)
            frame = pd.concat(list_)
def get_local_文件(pdate,hour,path='/data/'):
“”“从本地驱动器获取日期+小时处理文件
:param pdate:str处理日期
:参数小时:str处理小时
:param path:str文件位置的路径
:return:检索到的数据帧
"""
sdate=pdate+'-'+str(小时)
对于os.listdir(路径)中的p_文件:
如果fnmatch.fnmatch(p_文件'ABC_*'+sdate+'*.csv'):
返回路径+p_文件
def get_文件(更新,路径='/data/'):
小时=[时间(i).范围(24)内i的strftime(“%H”)]
文件列表=[]
以小时为单位的小时:
追加(获取本地文件(pdate,小时))
返回文件列表
end_datetime=datetime.combine(date.today(),time(0,0,0))
proc_datetime=end_datetime-timedelta(天=14)

而proc_datetime如果您想从一堆
.csv
文件创建一个数据帧,您可以这样做:

  • 在循环之前初始化空列表
  • 对数据帧中读取的每个文件进行循环,并将其附加到列表中
  • 将列表连接到循环后的单个数据帧中
我没有检查您对日期和文件名的处理是否正确,但以下是关于连接部分代码的相关更改:

end_datetime = datetime.combine(date.today(), time(0, 0, 0))
proc_datetime = end_datetime - timedelta(days=14)
list_ = []
while proc_datetime <= end_datetime:
    proc_datetime += timedelta(days=1)
    a = get_files(str(proc_datetime.date()).replace('-', '_'))
    for file_ in a:
        if file_ != None:
            df = pd.read_csv(file_, index_col=None, header=0, delimiter=';')
            list_.append(df)
frame = pd.concat(list_)
end_datetime=datetime.combine(date.today(),time(0,0,0))
proc_datetime=end_datetime-timedelta(天=14)
列表\=[]

而proc_datetime如果您想从一堆
.csv
文件创建一个数据帧,您可以这样做:

  • 在循环之前初始化空列表
  • 对数据帧中读取的每个文件进行循环,并将其附加到列表中
  • 将列表连接到循环后的单个数据帧中
我没有检查您对日期和文件名的处理是否正确,但以下是关于连接部分代码的相关更改:

end_datetime = datetime.combine(date.today(), time(0, 0, 0))
proc_datetime = end_datetime - timedelta(days=14)
list_ = []
while proc_datetime <= end_datetime:
    proc_datetime += timedelta(days=1)
    a = get_files(str(proc_datetime.date()).replace('-', '_'))
    for file_ in a:
        if file_ != None:
            df = pd.read_csv(file_, index_col=None, header=0, delimiter=';')
            list_.append(df)
frame = pd.concat(list_)
end_datetime=datetime.combine(date.today(),time(0,0,0))
proc_datetime=end_datetime-timedelta(天=14)
列表\=[]
而proc_datetime
导入
导入glob
csvFiles=glob.glob(路径+“/data/*.csv”)
列表\=[]
对于csvFiles中的文件:
如果((datetime.combine(date.today(),time(0,0,0))-datetime(*映射(int,file.split(“-”[1])).days<14)
df=pandas.read_csv(文件,索引_col=None,头=0,分隔符=“;”)
列表附加(df\u f)
frame=pandas.concat(列表,忽略索引=True)
frame.to_csv(“追加文件.csv”)
假设文件路径中没有任何连字符(-)。

import
导入glob
csvFiles=glob.glob(路径+“/data/*.csv”)
列表\=[]
对于csvFiles中的文件:
如果((datetime.combine(date.today(),time(0,0,0))-datetime(*映射(int,file.split(“-”[1])).days<14)
df=pandas.read_csv(文件,索引_col=None,头=0,分隔符=“;”)
列表附加(df\u f)
frame=pandas.concat(列表,忽略索引=True)
frame.to_csv(“追加文件.csv”)

假设文件路径中没有任何连字符(-)。

为什么不直接使用:frame=pd将df连接到frame。concat(df)@2Obe返回此错误:第一个参数必须是pandas对象的iterable,您传递了类型为“DataFrame”的对象,因此文件名也包含日期。?还是应该根据上次修改的时间来选择?@VenkateshDurgumahanthi每个csv文件的文件名中都有一个日期,当我运行此程序时,它需要从过去14天中选择csv文件。有一天我在看书的时候,一切都很好。我需要提到的是,每天大约有25-35个csv。可能每天都会创建带有csv的子列表,这会导致问题。但我不知道为什么,我仍然不清楚这个问题。因此,在特定文件夹中,每天至少有25个文件。那么文件名是否也有日期和时间戳,或者如何区分特定日期的文件?你能举一个文件名的例子吗?为什么不直接用:frame=pd将df连接到frame。concat(df)@2Obe返回我这个错误:第一个参数必须是pandas对象的iterable,你传递了一个类型为“DataFrame”的对象,所以文件名也包含日期。?还是应该根据上次修改的时间来选择?@VenkateshDurgumahanthi每个csv文件的文件名中都有一个日期,当我运行此程序时,它需要从过去14天中选择csv文件。有一天我在看书的时候,一切都很好。我需要提到的是,每天大约有25-35个csv。可能每天都会创建带有csv的子列表,这会导致问题。但我不知道为什么,我仍然不清楚这个问题。因此,在特定文件夹中,每天至少有25个文件。那么文件名是否也有日期和时间戳,或者如何区分特定日期的文件?你能举个文件名的例子吗?就这样。空列表需要在循环之前,谢谢你,伙计。。。太多了,就这样。空列表需要在循环之前,谢谢你,伙计。。。这么多。