python-3.x - 读取多个 txt 并为每个使用原始文件中的名称创建 df
问题描述
文件夹有五个或六个 .csv 文件。我想使用 pd.read_csv() 一次读取所有这些,然后将每个 df 保存为 jupyter 中特定于文件名的变量,没有任何路径或文件类型。
例如,假设这是两个文件:
'../main/data/csv_files/file_1.csv'
'../main/data/csv_files/file_2.csv'
我可以对每个这样做:
file_1 = pd.read_csv('../main/data/csv_files/file_1.csv')
file_2 = pd.read_csv('../main/data/csv_files/file_2.csv')
但是,我的问题是如何在保持文件名命名约定的情况下使用循环或所有文件一次完成所有操作?
我可以使用 glob 或其他方式获取 csv 文件的所有文件路径的列表。然后我可以创建一个字典来将它们全部放入,但它使用它们的完整文件路径作为名称。
path = r'../main/data/csv_files'
files = glob.glob(path + '/*.csv')
dfs = {}
for x in files:
dfs[x] = pd.read_csv(x)
这可行,但完整路径的命名并不理想。
解决方案
如果您的文件名不是来自网络等不受信任的来源,请使用exec
运行 python 命令。
import ntpath
for x in files:
# /a/b/c.csv => c.csv
file_without_path = ntpath.basename(x)
# c.csv => c
file_without_extension = file_without_path[:-4]
# execute "c = pd.readcsv('a/b/c.csv')"
exec("{} = pd.read_csv('{}')".format(file_without_extension, x))
如果文件名不可信,请不要这样做,因为文件名中的任何代码都会被执行。
推荐阅读
- css - 如何使 CSS 内容斜体和粗体?
- android - 在android中使用“AnimatedVectorDrawable”作为编辑文本的开始图标的方法
- sqlalchemy - SQLalchemy KeyError 混合器类
- javascript - 如何从 for 循环中的返回值创建数组?
- javascript - 父组件状态更新后,子组件中的道具未更新
- awk - 使用linux命令对第二列进行排序
- c - 如何在c中验证字符串和双精度
- linker - 即使在静态库中也找不到符号
- python - 如何制作一个环以将每一轮中的数据保存在变量中以及该轮中的按钮和其他内容中?
- java - 有没有办法在 android(java) 的 firebase RTD 中获取自定义参考