如何在Python中按文件名的整数顺序读取CSV文件
解决文件按自然顺序读取的重命名方案
你遇到的是典型的字典序排序 vs 自然数字排序问题——文件名里的数字没有前导零的话,系统会把"15"当成比"149"小的字符串来排序,自然就乱了。给数字补上前导零(因为最大是999,补成3位即可),就能让系统按你想要的自然顺序读取文件了。下面给你几个不同平台的具体实现方法:
方法1:Windows PowerShell 命令
打开PowerShell,切换到你的CSV文件所在的文件夹,执行以下命令:
Get-ChildItem -Filter "Radius_*.csv" | ForEach-Object { $num = $_.Name -replace 'Radius_(\d+)\.csv', '$1' $newName = "Radius_$($num.PadLeft(3, '0')).csv" Rename-Item -Path $_.FullName -NewName $newName }
- 简单解释:
Get-ChildItem筛选出所有以Radius_开头的CSV文件- 用正则表达式提取文件名里的数字部分
PadLeft(3, '0')把数字补成3位,比如15变成015,9变成009Rename-Item完成重命名操作
方法2:Linux/macOS Bash 脚本
打开终端,进入文件所在目录,你可以用rename命令(部分系统可能需要先安装,比如Ubuntu用sudo apt install rename):
rename 's/Radius_(\d+)\.csv/sprintf("Radius_%03d.csv", $1)/e' Radius_*.csv
如果你的系统没有rename工具,也可以用循环实现:
for file in Radius_*.csv; do num=$(echo "$file" | sed -E 's/Radius_([0-9]+)\.csv/\1/') new_file=$(printf "Radius_%03d.csv" "$num") mv "$file" "$new_file" done
- 简单解释:
- 提取数字后,用
printf "%03d"把数字格式化为3位带前导零的字符串 - 最后用
mv命令完成重命名
- 提取数字后,用
方法3:Python 跨平台脚本
如果你需要跨平台的解决方案,或者想要更灵活的控制,可以写一段Python脚本:
import os # 替换成你的CSV文件所在文件夹路径,当前目录就用"./" folder_path = "./" for filename in os.listdir(folder_path): if filename.startswith("Radius_") and filename.endswith(".csv"): # 提取数字部分并处理 try: num_str = filename.split("_")[1].replace(".csv", "") num = int(num_str) # 生成带前导零的新文件名 new_filename = f"Radius_{num:03d}.csv" # 执行重命名 os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_filename)) except ValueError: # 跳过不符合命名规则的文件,避免误操作 continue
- 把脚本放在文件所在目录运行即可;如果文件在其他路径,修改
folder_path的值就行 - 脚本会自动跳过不符合
Radius_x.csv格式的文件,安全性更高
重要提醒
- 先备份文件:建议先复制一份文件到其他文件夹,测试重命名命令/脚本没问题后,再处理原文件
- 如果你以后会有超过999的文件,只需要把格式里的
03d改成对应位数(比如4位就用04d)
内容的提问来源于stack exchange,提问作者Shiddhartha Ramprakash
相关产品推荐
相关产品推荐

