Python 中的 Linux 命令在子文件夹中执行

这是我的文件夹结构:


ORDERNO'S  YEAR'S  MONTH'S  DATE'S  CSVFILES

408------->2010---->01-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ----->02-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ...

    ------->201101-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ----->02-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

    ------->201201-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ----->02-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ...

    ------->2013--01-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ----->02-->21--->1.CSV

                           --->2.CSV

                      --->22--->1.CSV

                           --->2.CSV

               ...

因为它们在特定日期内有许多 csv 文件。我想将每个日期文件夹内的所有 csv 文件与第一个文件的标题合并到一个文件中,名称为 orderno_year_month_date.csv。意味着每个日期文件夹将只有一个以其父文件夹命名的 csv。所以,我想要在 linux 中执行此命令,我可以在 ORDERNO 目录之外运行或使用 python 脚本执行相同的命令,这样我就不必再去一次再次进入文件夹并手动执行命令。


**同样的问题3个月前在askubuntu上发布过,但没有答案。


预期的结构应该是这样的


ORDERNO'S  YEAR'S  MONTH'S  DATE'S  CSVFILES

408------->2010---->01-->21--->408_2010_01_21.CSV

                      --->22--->408_2010_01_22.CSV

                      ...

以前,我要转到每个订单号的每年文件夹的每个日期文件夹。并用于为标头的单个文件运行此命令。


awk '(NR == 1) || (FNR > 1)' *.csv > 4011_2020_07_16.csv  (example)


慕容森
浏览 119回答 1
1回答

哔哔one

我将使用这个模拟文件结构(使用tree命令绘制,并保存~/test/在我的计算机中):test└── 408    └── 2010        └── 01            ├── 21            │   ├── 1.csv            │   └── 2.csv            ├── 22            │   ├── 1.csv            │   └── 2.csv            └── 23                ├── 1.csv                └── 2.csv您可以使用 Python 重命名文件,并使用以下命令pathlib将它们连接起来pandas:import pandas as pdfrom pathlib import Pathdef getfolders(files):    return sorted(list(set([file.parent for file in files])))def getpathproperty(folder, prop):    properties = {"orderno": 3, "year": 2, "month": 1, "day": 0}    for i in range(properties[prop]):        folder = folder.parent    return folder.stempath = Path("~/test").expanduser()allfiles = list(path.rglob("*.csv")) # Each file in allfiles is a Path objectfolders = getfolders(allfiles)for folder in folders:    files = sorted(list(folder.glob("*.csv")))    df = pd.concat([pd.read_csv(file) for file in files])    # Get the values from the path to rename the files    orderno = getpathproperty(folder, "orderno")    year = getpathproperty(folder, "year")    month = getpathproperty(folder, "month")    day = getpathproperty(folder, "day")    # Save the new CSV file    df.to_csv(folder/f"{orderno}_{year}_{month}_{day}.csv", index=False)    # Delete old files, commented for safety    # for file in files:        # file.unlink(missing_ok=True)这产生:test└── 408    └── 2010        └── 01            ├── 21            │   └── 408_2010_01_21.csv            ├── 22            │   └── 408_2010_01_22.csv            └── 23                └── 408_2010_01_23.csv
打开App,查看更多内容
随时随地看视频慕课网APP