【问题标题】:Insert strings into dictionary of file paths using regular expressions使用正则表达式将字符串插入文件路径字典
【发布时间】:2019-07-06 15:40:09
【问题描述】:

所以我有一个文件路径字典,如下所示:

import os

main_path = r'C:\Users\User\Desktop\all python files'

dict_path_old2 = {'A': os.path.join(main_path, 'Alpha') + f'\\filenames.csv',
                 'B': os.path.join(main_path, 'Beta') + f'\dont have.csv',
                 'C': os.path.join(main_path, 'Charlie') + f'\\an obvious.csv',
                 'D': os.path.join(main_path, 'Delta') + f'\pattern.csv',
                 }

我对处理字符串的高级技术不太熟悉,我正在寻找一种pythonic方法来在字典中每个值的文件名之前插入字符串'copy',以便新字典看起来像这样:

C:\Users\User\Desktop\all python files\Alpha\copy filenames.csv
C:\Users\User\Desktop\all python files\Beta\copy dont have.csv
C:\Users\User\Desktop\all python files\Charlie\copy an obvious.csv
C:\Users\User\Desktop\all python files\Delta\copy pattern.csv

我知道正则表达式可以实现这一点,但我不知道如何并且希望有人向我展示它是如何完成的。如果有比正则表达式更 Python 的方法可以实现相同的目标,请随时向我展示,因为学习更多实现相同目标的方法真是太好了。

提前谢谢你

【问题讨论】:

  • 请注意os.path 接受多个位置参数,因此您可以使用os.path.join(main_path, 'Alpha', f'filenames.csv') 等等。
  • 实际上,不这样做并且包括\\ 会破坏可移植性,我认为这是首先使用os.path 的全部意义

标签: python regex python-3.x insert filenames


【解决方案1】:

使用os.path,您可以执行以下操作:

dict_path = {
   k: os.path.join(os.path.dirname(path), 'copy ' + os.path.basename(path))
   for k, path in dict_path_old.items()
}

【讨论】:

  • 请注意,使用os.path 我们可以很好地构建一个可移植的解决方案,而使用正则表达式会更难
  • 真的很感激。所以以后每当我处理路径时,我应该总是在正则表达式之前想到 os.path?
  • 我不确定您是否应该为性能关键代码使用正则表达式,但根据经验,我建议使用 os.path 来处理路径
【解决方案2】:

这是一种方法:

for k, v in dict_path_old2.items():
    dict_path_old2[k] = re.sub(r'\\([^\\]+)$', '\copy \\1', dict_path_old2[k])

数据:

dict_path_old2 = {
    'A': 'C:\\Users\\User\\Desktop\\all python files\\Alpha\\filenames.csv',
    'B': 'C:\\Users\\User\\Desktop\\all python files\\ Beta\\filenames.csv',
    'C': 'C:\\Users\\User\\Desktop\\all python files\\Charlie\\filenames.csv',
    'D': 'C:\\Users\\User\\Desktop\\all python files\\Delta\\filenames.csv'
}

【讨论】:

  • 刚刚运行代码;它引发了一个错误。:AttributeError: 'dict' object has no attribute 'iteritems'
  • 尝试用items() 替换iteritems(),它引发了另一个错误:error: bad escape \c
  • 我的代码is working in this Python demo。我只能猜测,也许你运行的不是我正在运行的。
  • 原因可能是我用的是Python 3.7.3,demo是2.7.12
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多