如何批量读取桌面200个TXT文件并提取指定化学计算参数
批量提取TXT文件中的化学计算参数方案
嘿,我看你已经搞定了桌面200个TXT文件的遍历,现在就差精准揪出那些化学计算参数对吧?给你整理了两种适配你之前尝试过的工具的方案,直接就能上手:
Shell 脚本方案
用grep搭配循环就能快速提取目标行,如果你只需要完整的参数行,这个脚本最省心:
#!/bin/bash # 替换成你桌面存放TXT文件的实际文件夹路径 TARGET_DIR="$HOME/Desktop/your_chemical_files" for file in "$TARGET_DIR"/*.txt; do echo "=== 来自文件: $(basename "$file") 的参数 ===" # 精准匹配所有需要的参数行,直接输出 grep -E "HEAT OF FORMATION|TOTAL ENERGY|ELECTRONIC ENERGY|CORE-CORE REPULSION|GRADIENT NORM|DIPOLE|POINT GROUP|NO. OF FILLED LEVELS|IONIZATION POTENTIAL|HOMO LUMO ENERGIES|MOLECULAR WEIGHT|COSMO AREA|COSMO VOLUME" "$file" echo "" # 用空行分隔不同文件的结果,看起来更清晰 done
要是你只想提取数值部分(比如只拿HEAT OF FORMATION的KCAL值),可以给对应参数加awk处理,举个例子:
# 提取HEAT OF FORMATION的KCAL数值 grep "HEAT OF FORMATION" "$file" | awk '{print "生成热(KCAL/MOL): " $5}'
Ruby 脚本方案
你之前的Ruby代码只是打开了文件但没读取内容,这里给你补全逻辑,还能灵活处理数值提取:
# 替换成你的实际文件夹路径,比如 "/Users/xxx/Desktop/chemical_files/*.txt" Dir.glob('/Users/your_username/Desktop/chemical_files/*.txt').each do |file_path| puts "=== 来自文件: #{File.basename(file_path)} 的参数 ===" File.open(file_path, 'r') do |file| file.each_line do |line| # 匹配目标参数行并输出 if line.match?(/HEAT OF FORMATION|TOTAL ENERGY|ELECTRONIC ENERGY|CORE-CORE REPULSION|GRADIENT NORM|DIPOLE|POINT GROUP|NO. OF FILLED LEVELS|IONIZATION POTENTIAL|HOMO LUMO ENERGIES|MOLECULAR WEIGHT|COSMO AREA|COSMO VOLUME/) puts line.strip end # 要是需要单独提取某个参数的数值,比如偶极矩 if (match = line.match(/DIPOLE = (\d+\.\d+) DEBYE/)) puts "偶极矩: #{match[1]} Debye" end end end puts "" end
小提示
如果想把所有提取的结果汇总到一个文件里:
- Shell脚本可以在循环里加
>> all_parameters.txt,比如把grep ... "$file"改成grep ... "$file" >> all_parameters.txt - Ruby脚本可以提前打开一个输出文件,把内容写入进去
内容的提问来源于stack exchange,提问作者user6544926
相关产品推荐
相关产品推荐

