我已经宣布了字典。我想查找目录中的所有csv文件,如果它的名称中有字典中的密钥,则应将其添加到KeyFile
变量中。如果其名称中的键下有一个字符串,则应将其添加到列表FoundedFiles
。
我的代码:
ScriptDirectory = os.path.dirname(__file__)
csvFiles = find_csv_files(ScriptDirectory)
Modules = {
'EGO_sgn': 'EgoMotion',
'FSD_sgn': 'FreeSpace',
'CAL_sgn': 'Calibration',
}
for key in Modules:
print key[:3]+'...'
FoundedFiles = []
for filename in csvFiles:
if key in filename:
KeyFile = ScriptDirectory + '\\' + filename
for filename in csvFiles:
if Modules[key] in filename:
FoundedFiles.append(ScriptDirectory + '\\' + filename)
我的代码工作正常,但我认为我的解决方案非常难看。我正在学习python,我确信它可以做得更优雅,但我只是不知道如何。
答案 0 :(得分:2)
欢迎来到蟒蛇世界! :)
首先,如果你有深层嵌套条件或循环,你应该使用函数来完成一些简单的任务,比如在文件名中找到一些东西。
第二 - 我建议你阅读pep8 https://www.python.org/dev/peps/pep-0008。它描述了python开发人员需要的很多东西,比如变量命名策略,空格等等。如果英语不是你的母语,它会翻译很多语言。
第三,你不应该在文件名中使用简单的斜杠,而是使用os.path.join()
。它在基于unix的系统,windows和任何地方都能很好地工作。
第四 - 你确定在csv目录中只能有一个key_file吗?也许它也应该是列表?
import os
modules = {
'EGO_sgn': 'EgoMotion',
'FSD_sgn': 'FreeSpace',
'CAL_sgn': 'Calibration',
}
path_to_csv = os.path.join("path", "to", "your", "csv", "directory")
founded_files = []
key_file = None
def is_modules_in_filename(filename):
for module_key, module_value in modules.items():
if module_key in filename:
return "key"
if module_value in filename:
return "value"
return False
for f in os.listdir(path_to_csv):
if not f.endswith(".csv"):
continue
filename = os.path.splitext(f)
in_modules = is_modules_in_filename(filename[0])
filename_with_path = os.path.join(path_to_csv, f)
if in_modules == "key":
key_file = filename_with_path
if in_modules == "value":
founded_files.append(filename_with_path)
print(key_file)
print(founded_files)