捕获主目录中所有子文件夹中的所有 csv 文件 - Python 3.x

Posted

技术标签:

【中文标题】捕获主目录中所有子文件夹中的所有 csv 文件 - Python 3.x【英文标题】:Capture all csv files within all subfolders in main directory - Python 3.x 【发布时间】:2019-12-02 11:14:54 【问题描述】:

以下代码用于根据给定的时间值拆分 csv 文件。问题是这段代码不会捕获所有的 csv 文件。例如在 TT1 文件夹中有几个子文件夹。这些子文件夹里面有文件夹。在这些子文件夹中有 csv 文件。当我将路径指定为 path='/root/Desktop/TT1 时,它不会处理这些子文件夹中的所有文件。请问如何解决这个问题。

在@Serafeim 的回答 (https://***.com/a/57110519/5025009) 之后,我尝试了这个:

import pandas as pd
import numpy as np
import glob
import os

path = '/root/Desktop/TT1/'
mystep = 0.4

#define the function
def data_splitter(df, name):
    max_time = df['Time'].max() # get max value of Time for the current csv file (df)
    myrange= np.arange(0, max_time, mystep) # build the threshold range
    for k in range(len(myrange)):
        # build the upper values 
        temp = df[(df['Time'] >= myrange[k]) & (df['Time'] < myrange[k] + mystep)]
        temp.to_csv("/root/Desktop/T1/_.csv".format(name, k))

for filename in glob.glob(os.path.join(path, '*.csv')):
    df = pd.read_csv(filename)
    name = os.path.split(filename)[1] # get the name of the file
    data_splitter(df, name)

【问题讨论】:

【参考方案1】:

您可以自动获取所有子文件夹并更改路径: 如果所有子文件夹都以“Sub”开头:

import pandas as pd
import numpy as np
import glob
import os

path = '/root/Desktop/TT1/'
mystep = 0.4

#define the function
def data_splitter(df, name):
    max_time = df['Time'].max() # get max value of Time for the current csv file (df)
    myrange= np.arange(0, max_time, mystep) # build the threshold range
    for k in range(len(myrange)):
        # build the upper values 
        temp = df[(df['Time'] >= myrange[k]) & (df['Time'] < myrange[k] + mystep)]
        temp.to_csv("/root/Desktop/T1/_.csv".format(name, k))

# use os.walk(path) on the main path to get ALL subfolders inside path
for root,dirs,_ in os.walk(path):
    for d in dirs:
        path_sub = os.path.join(root,d) # this is the current subfolder
        for filename in glob.glob(os.path.join(path_sub, '*.csv')):
            df = pd.read_csv(filename)
            name = os.path.split(filename)[1] # get the name of the current csv file
            data_splitter(df, name)

【讨论】:

谢谢,但没有 serafeim。子文件夹具有不同的名称。并且有不止一个子文件夹。在这些子文件夹中也有文件夹。因此,捕获 TT1 中的所有 csv 文件并位于子文件夹和文件夹下的东西将起作用 '/root/Desktop/TT1/' 内有很多不同名称的子文件夹。这没关系。在各个子文件夹中是否还有其他子文件夹? 对于 os.walk(path) 中的根目录、目录、文件:可以吗?如果我使用 os.walk,我不确定如何编辑现有代码 是的。在各个子文件夹中,我确实有其他子文件夹。那些有 csv 文件。并且所有子文件夹都不以“子”开头。它们有不同的名称 我已经更新了我的答案。现在,它会自动找到path = '/root/Desktop/TT1/' 中的所有子文件夹,然后它会进入每个子文件夹并找到所有.csv 文件。考虑接受答案

以上是关于捕获主目录中所有子文件夹中的所有 csv 文件 - Python 3.x的主要内容,如果未能解决你的问题,请参考以下文章

PYSPARK - 如何读取 S3 中所有子文件夹中的所有 csv 文件?

使用 Python 查找目录中的所有 CSV 文件

归档目录中的所有 csv 文件

将当前工作目录中的所有 CSV 文件读入具有正确文件名的 pandas

使用.htaccess将所有子文件夹的目录重定向到Root(主)目录

如何在目录中的所有 csvs 文件中进行 python 关键字搜索和单词计数器并写入单个 csv? [关闭]