在工作中遇到这么一个情况,在某个文件夹下有很多文件,还有可能在文件夹下还有文件夹;
文件夹下的文件内容是从数据库中导出的,具有特定的格式;
我需要将这个目录下的所有文件进行读取;
变量类型需要两种,list和dict;
变量名就是文件名,变量需要赋值的内容就是文件内容。
在没想到通过动态生成变量名及动态给变量赋值时,实现方式:
一个文件就需要一个实现,经常几千上万个文件,想想这个代码量,恐怖!!!
目的动态生成了变量、读取文本文件、处理文件内容并生成字典。
通过下述代码,可以将指定文件夹中的多个文本文件转换为字典形式的数据存储。
实践读数据库表也可以这么操作,省时省力,灰常好用!
name_list
=
[]
with
open
(r
'path'
,
'r'
, encoding
=
'UTF-8'
) as f:
name_mes
=
f.read()
name_mes
=
name_mes.split(
'\n'
)
for
key_mess
in
name_mes[:]:
if
key_mess !
=
'':
key_mes
=
key_mess.split(
'\t'
)
index_mes
=
key_mes[
2
]
name_list.append(index_mes)
self
.name_dict
=
dict
(
zip
(name_list, name_mes))
name_list
=
[]
with
open
(r
'path'
,
'r'
, encoding
=
'UTF-8'
) as f:
name_mes
=
f.read()
name_mes
=
name_mes.split(
'\n'
)
for
key_mess
in
name_mes[:]:
if
key_mess !
=
'':
key_mes
=
key_mess.split(
'\t'
)
index_mes
=
key_mes[
2
]
name_list.append(index_mes)
self
.name_dict
=
dict
(
zip
(name_list, name_mes))
self
._path
=
path
file_names
=
[os.path.join(root,
file
)
for
root, dirs, files
in
os.walk(
self
._path)
for
file
in
files
if
os.path.splitext(
file
)[
1
]
=
=
".txt"
]
for
file_path
in
file_names:
file_name
=
file_path.replace(
self
._path, '
').replace('
\\
', '
_')
var_value
=
os.path.splitext(file_name)[
0
]
var_key
=
'self.'
+
os.path.splitext(file_name)[
0
]
+
'_list'
var_dict
=
'self.'
+
os.path.splitext(file_name)[
0
]
+
'_dict'
exec
(f
'{var_value}=[]'
)
exec
(f
'{var_key}=[]'
)
exec
(f
'{var_dict}={{}}'
)
with
open
(file_path,
'r'
, encoding
=
'utf-8'
) as f:
txt_content
=
f.read()
exec
(f
"{var_value} = txt_content.split('\\n\\n')"
)
for
item
in
eval
(var_value):
if
item !
=
'':
key_mes
=
item.split(
'\t'
)
index_mes
=
key_mes[
0
]
exec
(f
"{var_key}.append(index_mes)"
)
exec
(f
"{var_dict} = dict(zip(eval(var_key), eval(var_value)))"
)
self
._path
=
path
file_names
=
[os.path.join(root,
file
)
for
root, dirs, files
in
os.walk(
self
._path)
for
file
in
files
if
os.path.splitext(
file
)[
1
]
=
=
".txt"
]
for
file_path
in
file_names:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-6-14 17:07
被行简编辑
,原因: