某项目的一些目录归档用代码
2024.08.22
这里保存一些在负责某项目数据整理归档中用到的一些实用代码,以防万一未来还用得上,于此存档备考。
遍历磁盘汇总数据目录
遍历指定磁盘,将以某种前缀或某种格式后缀的文件写入一个索引CSV,保存在指定目录下。
import os
import csv
# 定义要查找的文件前缀和格式
prefix = "ABCDEFG" #定义前缀
extensions = [".zip", ".rar", ".7z", ".tar", ".gz", ".tif"] #定义拓展名
# 定义要遍历的盘符
drive = "G:\\" #指定遍历盘符
# 定义输出文件
output_file = "D:\\Directory\\Disk_G_index.csv" #指定输出目录
# 遍历目录并查找符合条件的文件
def find_files():
file_info = []
for root, dirs, files in os.walk(drive):
current_dir_files = []
for file in files:
if file.startswith(prefix) and any(file.endswith(ext) for ext in extensions):
current_dir_files.append((file, root))
if current_dir_files:
dir_info = root.replace(drive, drive + os.sep)
file_info.append((dir_info, current_dir_files))
return file_info
# 将文件信息写入CSV
def write_to_csv(file_info):
with open(output_file, mode='w', newline='', encoding='utf-8-sig') as csvfile:
csv_writer = csv.writer(csvfile)
for dir_info, files in file_info:
# 获取目录名
dir_name = os.path.basename(dir_info.rstrip(os.sep))
# 先写入一个空行
csv_writer.writerow([])
# 再写入目录位置
csv_writer.writerow([dir_info])
for file_name, file_path in files:
# 获取文件后缀
file_ext = os.path.splitext(file_name)[1]
# 写入文件后缀、文件名、目录名、目录位置
csv_writer.writerow([file_ext, file_name, dir_name, file_path.replace(drive, drive + os.sep)])
if __name__ == "__main__":
file_info = find_files()
write_to_csv(file_info)
print(f"Index file created at {output_file}")
为数据添加日期前缀
从数据存档包中提取日期,重新命名为以日期为前缀的数据包,便于数据按采集时间整理。如“AAAA_BBBB_CCCC_20220119_DDDD.7z”会被重新命名为“20220119_AAAA_BBBB_CCCC_20220119_DDDD.7z”。
import os
import re
# 指定文件夹路径
folder_path = r"H:\Directory\Images"
# 文件名的正则表达式模式,假设日期部分总是以2020开头
date_pattern = re.compile(r'_(2020\d{4})_')
# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
if filename.endswith(".7z") or filename.endswith(".tar.gz"): # 只处理以 .7z .tar.gz 结尾的文件
match = date_pattern.search(filename)
if match:
date_str = match.group(1)
new_filename = f"{date_str}_{filename}"
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
os.rename(old_file_path, new_file_path)
print(f"Renamed: {filename} -> {new_filename}")
print("All files have been processed.")