【问题标题】:Python String parsing: filenames with spacesPython字符串解析:带空格的文件名
【发布时间】:2011-04-19 14:53:23
【问题描述】:

这可能不是最常见的文件名解析问题,但我有一个程序可以显示以下格式的文件列表:

文件名.ext 位置

一些例子是

sampleFile.jpg C:\Images\我的 jpgs 另一个文件.bmp C:\Images\myBmps

文件名和位置由一个空格分隔。如图所示,我的文件名中可以​​有空格。

我想从每一行中提取文件名,但似乎找不到这样做的好方法。 我想搜索特定字符的索引,然后从 0 到 (index - offset) 提取子字符串,其中 offset 是我应该返回的字符数。但我不认为有一个我可以搜索的字符可以保证硬编码的偏移量会起作用。

【问题讨论】:

  • 批量?电源外壳?赛格温? php?你的问题是什么?
  • “但我不认为有一个我可以搜索的字符可以保证硬编码的偏移量会起作用。”真的很重要。如果你不能定义规则,那么我们也不能。
  • @S.Lott,您不限于遵循相同的方法。
  • 为什么不能:作为要索引的字符工作?不是文件中的所有位置都以 drive : 开头吗?
  • 看来我无法经常回来查看。我很抱歉太慢了。

标签: python windows filenames string-parsing


【解决方案1】:

我可能会使用正则表达式来抓取以驱动器号开头到行尾的任何内容,例如:

 import re
 matchWinPaths = re.compile("^.*([A-Z]:\\.+$)")

然后匹配每一行

 matches = re.match(line, matchWinPaths)
 winPath = matches.group(1)

【讨论】:

  • 任何驱动器号听起来都是个好计划。我还没有找到一种方法来生成任何不包含路径前面的驱动器号的输入。
  • @Keikoku:“但我认为没有一个我可以搜索的字符可以保证硬编码的偏移量会起作用”?所以“[A-Z]:”真的有用吗?你能澄清一下这个问题吗?输入文件的确切规则是什么仍然有点令人困惑。
【解决方案2】:

除了扩展名之前的末尾之外,您的文件名中是否有句点 (.)?如果没有,您应该能够解析如下内容:

1 find first instance of '.'
2 step to the next space
3 that space is the delimiter between file name and location

【讨论】:

  • 由于句点是有效的文件名字符,因此带有句点的文件名可能会出现在列表中。不过,这是一个很好的尝试。
【解决方案3】:

好吧,如果你有不同的位置,例如 C:\ , D:\ 等,你可以只分割这些字符

import re
f=open("file")
for line in f:
    print re.split("[C-Z]:",line)[0]
f.close(0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2018-07-18
    • 2017-01-13
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多