查找目录中的所有csv文件,并按名称将找到的文件添加到正确的列表中

时间:2016-04-19 08:34:34

标签: python python-2.7

我已经宣布了字典。我想查找目录中的所有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,我确信它可以做得更优雅,但我只是不知道如何。

1 个答案:

答案 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)