Files
solidstate-tools/Screen/process_txt.py
2025-09-24 11:57:52 +08:00

96 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
import os
import re
import sys
import csv
def extract_data_from_folder(folder_path):
"""
读取文件夹中所有txt文件提取指定信息并写入一个CSV文件。
(已修正正则表达式)
:param folder_path: 包含txt文件的文件夹路径。
"""
# 检查文件夹是否存在
if not os.path.isdir(folder_path):
print(f"错误:文件夹 '{folder_path}' 不存在。")
return
# 定义要提取数据的正则表达式
# 1. 对应 "Percolation diameter (A): 1.234"
pattern1 = re.compile(r"Percolation diameter \(A\): ([\d\.]+)")
# 2. 对应 "the minium of d 1.23 #" (已根据您的反馈修正)
pattern2 = re.compile(r"the minium of d\s*([\d\.]+)\s*#")
# 3. 对应 "Maximum node length detected: 5.67 A"
pattern3 = re.compile(r"Maximum node length detected: ([\d\.]+) A")
# 存储所有提取到的数据
all_data = []
# 遍历文件夹中的所有文件,使用 sorted() 确保处理顺序一致
for filename in sorted(os.listdir(folder_path)):
if filename.endswith(".txt"):
txt_path = os.path.join(folder_path, filename)
try:
with open(txt_path, 'r', encoding='utf-8') as file:
content = file.read()
# 使用修正后的正则表达式查找数据
match1 = pattern1.search(content)
match2 = pattern2.search(content)
match3 = pattern3.search(content)
# 提取匹配到的值,如果未匹配到则为空字符串 ''
val1 = match1.group(1) if match1 else ''
val2 = match2.group(1) if match2 else ''
val3 = match3.group(1) if match3 else ''
# 获取文件名(不含.txt后缀
base_filename = os.path.splitext(filename)[0]
# 将这一行的数据添加到总列表中
all_data.append([base_filename, val1, val2, val3])
except Exception as e:
print(f"处理文件 {filename} 时发生错误: {e}")
# 如果没有找到任何txt文件或数据则不创建csv
if not all_data:
print("未在文件夹中找到任何 .txt 文件或未能提取任何数据。")
return
# 根据文件夹名确定CSV文件名
folder_name = os.path.basename(os.path.normpath(folder_path))
csv_filename = f"{folder_name}.csv"
# 写入CSV文件
try:
with open(csv_filename, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# 写入表头
headers = ['filename', 'Percolation_diameter_A', 'minium_of_d', 'Max_node_length_A']
writer.writerow(headers)
# 写入所有数据
writer.writerows(all_data)
print(f"数据成功写入到文件: {csv_filename}")
except Exception as e:
print(f"写入CSV文件 {csv_filename} 时发生错误: {e}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("用法: python your_script_name.py <folder_path>")
sys.exit(1)
input_folder = sys.argv[1]
extract_data_from_folder(input_folder)