我有一个文件夹,其中包含多个csv
文件和gz
格式类型的压缩文件。这些未压缩的gz
文件中的每个文件也包含一个csv
文件。我想提取所有这些文件,并为每个文件创建一个与csv
文件名相同的数据框(不带扩展名)。
例如,如果具有以下文件:
train.csv
test.csv
validation.csv.gz
我想拥有3个数据框对象,它们的名称恰好是:训练,测试和验证。
我已经尝试过此代码:
import pandas as pd
import gzip
extension = ".gz"
for item in os.listdir():
if item.endswith(extension):
with gzip.open(item) as f:
item.split('.', 1)[0] = pd.read_csv(f) #Split on the first occurence of '.' and give this name to my dataframe
else:
item.split('.', 1)[0] = pd.read_csv(item)
此代码不起作用,因为当我尝试访问环境变量时,python找不到它们。
任何帮助,请!!
答案 0 :(得分:0)
使用字典存储可变数量的变量。
尽管可以通过字符串命名变量,但强烈建议不要这样做。字典是高性能的,可让您以结构化的方式维护对象的集合。
d = {}
for item in os.listdir():
fn, ext = item.split('.')
if ext == 'gz':
with gzip.open(item) as f:
d[fn] = pd.read_csv(f)
else:
d[fn] = pd.read_csv(item)
然后通过d['train']
,d['test']
等访问。
您的代码不起作用,因为item.split('.', 1)[0]
是标量,而不是可以分配对象的变量名。
答案 1 :(得分:0)
字符串是不可变的。如果要将动态对象分配给给定的字符串,只需使用exec。
此语句支持动态执行Python代码。首先 表达式的计算结果应为字符串,打开的文件对象或 一个代码对象。
import pandas as pd
import gzip
extension = ".gz"
for item in os.listdir():
if item.endswith(extension):
with gzip.open(item) as f:
exec(item.split('.', 1)[0] + "=" + "pd.read_csv(f)" ) #Split on the first occurence of '.' and give this name to my dataframe
else:
exec(item.split('.', 1)[0] + "=" + "pd.read_csv('" + item + "')")