我已经制作了一个脚本来检查某些文件的有效性,并将数据框写入有效列表名称和带注释的vaild中。
但是当我运行时我无法将所有文件名插入数据框,只更新了第一个文件名
我的代码如下:
file_path = 'C:\file'
f =next(os.walk(file_path))[2]
df = pd.DataFrame(index=range(1,len(f)) ,columns = ['Valid Files','In Valid Files','Comments'])
for file in f:
filename = file
file_name = '%s'%file_path+'\\'+'%s'%file
try:
parsefile('%s'%file_name)
df["Valid Files"]= '%s'%filename
df["Comments"] = '--'
except Exception, e:
df["In Valid Files"]= '%s'%filename
df["Comments"]= e
df
我的输出是
Valid Files In Valid Files Comments
1 Testa.xml Test_f.xml error1
2 Testa.xml Test_f.xml error1
3 Testa.xml Test_f.xml error1
但我的期望是这样的
Valid Files Comments In Valid Files Comments
1 Testa.xml -- Test_f.xml error1
2 Testb.xml -- Test_h.xml error2
3 Testc.xml -- Test_k.xml error3
期待改进和建议。提前致谢。
答案 0 :(得分:1)
您正在覆盖“有效文件”列中的“使用有效文件”列注释。
试试这个:
for file in f:
filename = file
file_name = '%s'%file_path+'\\'+'%s'%file
try:
parsefile('%s'%file_name)
df["Valid Files"]= '%s'%filename
df["Valid Files Comments"] = '--'
except Exception, e:
df["In Valid Files"]= '%s'%filename
df["In Valid Files Comments"]= e
我无权添加评论。如果没有评论,我会删除答案。
如果直接写入for循环中的列,它将仅更新最后一个值。因此,我建议您创建一个列表并附加值,然后使用列表在您编写时使用键名创建字典,然后创建数据帧。这个过程很漫长我不知道它的简化解决方案。
像:
Valid_Files = []
Valid_Files_Comments = []
In_Valid_Files = []
In_Valid_Files_Comments = []
for file in f:
filename = file
file_name = '%s'%file_path+'\\'+'%s'%file
try:
parsefile('%s'%file_name)
Valid_Files.append('%s'%filename)
Valid_Files_Comments.append('--')
except Exception, e:
In_Valid_Files.append('%s'%filename)
In_Valid_Files_Comments.append('e')
df = pd.DataFrame({'Valid Files':Valid_Files,'Valid Files Comments':Valid_Files_Comments,'In Valid Files':In_Valid_Files,'In Valid Files Comments':In_Valid_Files_Comments})
这将为您提供所需的输出。