【问题标题】:Python - Get current dir of file opened with glob using wildcardsPython - 使用通配符获取使用 glob 打开的文件的当前目录
【发布时间】:2022-01-16 13:46:08
【问题描述】:

我正在使用 glob() 来读取目录中的所有文件。我需要读取所有子文件夹中的每个 csv 文件。在我阅读并处理每个文件后,我想将每个新文件保存在另一个文件夹中,但保留子文件夹名称。打开我使用的文件:

data = "data/**/*.csv"
csv_files = glob(data, recursive=True)

然后我读取每个文件:

for f in csv_files:
        file = pd.read_csv(f, sep=';')
        
        fileName = os.path.basename(f)
        path = os.path.dirname(data)
        fileFolder = os.path.basename(path)

#       Do some stuff
#
#       Then save the file

        file.to_csv("new_data/"+fileFolder+fileName)

我的问题是 fileFolder 返回 ** 而不是实际的文件夹名称

我的源目录如下:

data / 
       - January 2021
       - February 2021
             .
             .
             .
       - December 2021

我想把我的文件保存在

new_data / 
       - January 2021
       - February 2021
             .
             .
             .
       - December 2021

我正在寻找一种不需要手动创建包含所有子文件夹的列表的方法。

【问题讨论】:

    标签: pandas dataframe directory export-to-csv glob


    【解决方案1】:

    试试这个:

    for f in csv_files:
        file = pd.read_csv(f, sep=';')
            
    #    Do some stuff
    #
    #    Then save the file
    
        new_path = os.path.join(*f.split(os.path.sep)[1:])
        file.to_csv(os.path.join('new_data', *new_path))
    

    它是做什么的

    1. 在 macOS/Linux 上按 / 和在 Windows 上按 \ 拆分文件路径
    2. 删除第一个(最顶层目录)
    3. 'new_data' 一起重新加入它

    【讨论】:

    • 谢谢,我试过你的答案,但它抛出了这个错误:[WinError 3] The system cannot find the path specified: '\\F\\l\\o\\a\\t\\R\\e\\p\\o\\r\\t\\_\\2\\0\\2\\1\\0\\2\\0\\1\\.\\c\\s\\v' 但是,使用:new_path = (f.split(os.path.sep)[-2]) 它只有在我想创建一个级别时才有效。它解决了我的问题,但我会尝试为任意数量的子文件夹寻找解决方案。
    • 糟糕,这是一个有趣的错误!你能给我看看f的样本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多