每个目录中有不同的子目录,文件名相同。 (每个文件夹20个文件)
例如:
FolderA:
1.txt
2.txt
3.txt
FolderB:
1.txt
2.txt
3.txt
FolderC:
1.txt
2.txt
3.txt
等等
我想将每个文件夹中相同文件的路径写入csv文件。输出应有 20 个带路径的 csv 文件
我是 Python 的新手。有人可以帮我吗。
谢谢
输出示例:
output_1.csv
path/to/FolderA/1.txt
path/to/FolderB/1.txt
path/to/FolderC/1.txt
output_2.csv
path/to/FolderA/2.txt
path/to/FolderB/2.txt
path/to/FolderC/3.txt
鉴于:
C:\FILES
├───FolderA
│ 1.txt
│ 2.txt
│ 3.txt
│
├───FolderB
│ 1.txt
│ 2.txt
│ 3.txt
│
└───FolderC
1.txt
2.txt
3.txt
您可以使用
pathlib
模块递归收集文件。 我假设您希望基本文件名成为输出名称的一部分。 .stem
属性是不带扩展名的基本文件名。
from pathlib import Path
# Delete output files if they already exist.
for filename in Path(r'.').glob('output_*.csv'):
filename.unlink()
# For each text file, append its absolute path to the appropriate file.
for filename in Path(r'c:\files').rglob('*.txt'):
with open(f'output_{filename.stem}.csv', 'a') as fout:
print(filename.absolute(), file=fout)
输出:
output_1.csv
c:\files\FolderA\1.txt
c:\files\FolderB\1.txt
c:\files\FolderC\1.txt
output_2.csv
c:\files\FolderA\2.txt
c:\files\FolderB\2.txt
c:\files\FolderC\2.txt
output_3.csv
c:\files\FolderA\3.txt
c:\files\FolderB\3.txt
c:\files\FolderC\3.txt
我觉得你应该使用for循环,例如:
Import os
Folder_num = 1
For i in range(20#<- number of folders):
Parent = Folder
X = 0
For i in range(3#<-number of files in folder):
Print(os.listdir(path)[x])#prints path to first file in directory
X+= 1
Folder_num += 1
这可能行不通,因为我没有时间检查和调试它,但希望你能明白主要想法。
要完成此任务,您可以将 Python 与
os
和 csv
库结合使用。以下是分步指南和示例脚本,可帮助您生成带有路径的 CSV 文件:
import os
import csv
# Define the root directory containing all folders
root_dir = 'path/to/root_directory' # Update this with your actual path
# Get all subdirectories
subdirectories = [os.path.join(root_dir, d) for d in os.listdir(root_dir) if os.path.isdir(os.path.join(root_dir, d))]
# Dictionary to store file paths
file_paths = {}
# Iterate through each subdirectory
for subdir in subdirectories:
for file_name in os.listdir(subdir):
if file_name.endswith('.txt'):
file_path = os.path.join(subdir, file_name)
if file_name not in file_paths:
file_paths[file_name] = []
file_paths[file_name].append(file_path)
# Write paths to separate CSV files
for index, (file_name, paths) in enumerate(file_paths.items()):
csv_file_name = f'output_{index + 1}.csv'
with open(csv_file_name, mode='w', newline='') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerow(paths)
print("CSV files generated successfully.")
将
'path/to/root_directory'
替换为包含文件夹的目录路径。
此脚本将生成所需的 CSV 文件,每个文件都包含不同目录中具有相同名称的文件的路径。每个文件将被命名为
output_X.csv
,其中 X
是从 1 开始的索引。