Linux下如何将exiftool生成的分行EXIF TXT文件转换为CSV格式
转换方法
方法1:直接用ExifTool原生导出CSV(优先推荐)
你完全可以跳过导出TXT的步骤,直接用ExifTool生成符合要求的CSV文件,执行以下命令即可:
exiftool -csv -FileName -DateTimeOriginal -FileSize *.JPG > 输出清单.csv
如果需要同时处理子目录里的音视频、图片文件,可以加上-r参数:
exiftool -r -csv -FileName -DateTimeOriginal -FileSize -ext JPG -ext MP4 -ext MOV ./ > 输出清单.csv
生成的CSV可以直接满足你的格式要求,不需要二次转换。
方法2:已有TXT文件时用Python脚本转换
如果已经生成了多行结构的TXT文件,可以用下面的Python脚本处理,把脚本和你的TXT文件放在同一目录,修改脚本里的输入输出文件名即可运行:
# 配置输入输出文件名 input_txt = "你的EXIF导出文件.txt" output_csv = "文件清单.csv" # 初始化变量 current_file = {} result = [] with open(input_txt, 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines: line = line.strip() if not line: continue # 识别新文件的分隔行 if line.startswith('========'): if current_file: result.append(current_file) current_file = {} # 提取文件名 elif line.startswith('File Name'): current_file['filename'] = line.split(maxsplit=2)[-1].strip() # 提取拍摄时间 elif line.startswith('Date/Time Original'): current_file['date'] = line.split(maxsplit=3)[-1].strip() # 提取文件大小 elif line.startswith('Size'): current_file['size'] = line.split(maxsplit=1)[-1].strip() # 加入最后一个文件的信息 if current_file: result.append(current_file) # 写入CSV with open(output_csv, 'w', encoding='utf-8-sig') as f: f.write("filename,date,size\n") for item in result: f.write(f"{item.get('filename','')},{item.get('date','')},{item.get('size','')}\n")
方法3:Windows系统无需额外软件,用PowerShell处理
如果你不想安装Python,可以直接用系统自带的PowerShell执行以下命令,修改对应的输入输出路径即可:
$inputPath = "你的EXIF导出文件.txt" $outputPath = "文件清单.csv" $content = Get-Content $inputPath -Encoding UTF8 $output = @("filename,date,size") $current = [PSCustomObject]@{filename="";date="";size=""} foreach ($line in $content) { $line = $line.Trim() if ($line -like "========*") { if ($current.filename) { $output += "$($current.filename),$($current.date),$($current.size)" } $current = [PSCustomObject]@{filename="";date="";size=""} } elseif ($line -like "File Name*") { $current.filename = $line.Substring(20).Trim() } elseif ($line -like "Date/Time Original*") { $current.date = $line.Substring(20).Trim() } elseif ($line -like "Size*") { $current.size = $line.Substring(20).Trim() } } if ($current.filename) { $output += "$($current.filename),$($current.date),$($current.size)" } $output | Out-File $outputPath -Encoding UTF8
内容的提问来源于stack exchange,提问作者CJ Jones
相关产品推荐
相关产品推荐

