我想为目录中的每个文件分配唯一的变量名称。我不知道如何做到这一点。我是python的新手,所以我很抱歉代码很邋。。
def DataFinder(path, extension):
import os
count = 0
extensions = ['.txt','.csv','.xls','xlsm','xlsx']
allfiles = []
if not extension in extensions:
print('Can\'t read data from this file type.\n','Allowed file types are\n',str(extensions))
else:
#loop through the files
for root, dirs, files in os.walk(path):
for file in files:
#check if the file ends with the extension
if file.endswith(extension):
count+=1
print(str(count)+': '+file)
allfiles.append(file)
if count==0:
print('There are no files with',extension,'extension in this folder.')
return allfiles
如何修改此代码以将每个迭代的变量名称分配为 df_number.of.file 作为字符串?
由于
我的最终目标是在唯一变量名下为每个文件设置一组DataFrame对象,而无需手动创建这些变量。
建议的副本没有回答我的问题,也没有为我工作。
allfiles = {}
#filter through required data extensions
if not extension in extensions:
print('Can\'t read data from this file type.\n','Allowed file types are\n',str(extensions))
else:
#loop through the files
for root, dirs, files in os.walk(path):
for file in files:
#check if the file ends with the extension
if file.endswith(extension):
#raise counter
count+=1
print(str(count)+': '+file)
allfiles.update({'df'+str(count) : path+file})
根据建议调整代码后,我的输出是字典:
{' df1':' C:/Users/Bartek/Downloads/First.csv' ;,' df2':' C:/ Users / Bartek/Downloads/Second.csv' ;,' df3':' C:/Users/Bartek/Downloads/Third.csv'}
我之前使用list实现了类似的东西:
[' df_1First.csv',' df_2Second.csv',' df_3Third.csv']
但我的确切问题是如何实现这一目标:
对于dict中的每个对象: - 创建具有连续对象编号的变量
所以这个变量可以作为数据参数传递给pandas.DataFrame()
我知道这是一个非常糟糕的主意(http://stupidpythonideas.blogspot.co.uk/2013/05/why-you-dont-want-to-dynamically-create.html),因此,请你用dict向我展示正确的方法吗?
非常感谢
答案 0 :(得分:0)
您应该能够修改代码的这一部分以实现您的目标。而不是打印出文件的数量。使用count
创建新的唯一文件名。
if file.endswith(extension):
count+=1
newfile = ('df_' + str(count) + file)
allfiles.append(newfile)
count
对于每个不同的文件扩展名都是唯一的。您应该能够在allfiles
中找到新创建的文件名。
编辑使用字典(感谢Rory):我会建议另一条路线。创建一个字典并使用文件名作为密钥。
allfilesdict = {}
...
if file.endswith(extension):
count+=1
newfile = ('df_' + str(count) + file)
allfilesdict[file] = newfile
然后记得如果要在函数之外的某个地方使用它,则返回allfilesdict
。
答案 1 :(得分:0)
你可以像这些修改第一个脚本。
从时间导入gmtime,strftime
导入os
def DataFinder(路径,扩展名):
count = 0
extensions = ['.txt','.csv','.xls','xlsm','xlsx']
allfiles = []
if not extension in extensions:
print('Can\'t read data from this file type.\n','Allowed file types are\n',str(extensions))
else:
#loop through the files
for root, dirs, files in os.walk(path):
for file in files:
#check if the file ends with the extension
if file.endswith(extension):
count+=1
#taking date and time
date_time=strftime("%Y-%m-%d %H:%M:%S", gmtime())
#now to get file name we are splite with (.)dot so in list we get first (i.e.file_name[0]) file name and (i.e.file_name[1]) as extension.
file_name=file.split('.')
allfiles.append(file_name[0]+date_time+'.'+file_name[1])
if count==0:
print('There are no files with',extension,'extension in this folder.')
return allfiles
打印DataFinder('/ home / user / tmp / test','。csv')