文件路径中的转义空间

2024-05-29 02:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个python工具来读取日志文件并对其进行处理

它应该做的一件事是使用日志文件中列出的路径(它是备份工具的日志文件)

/Volumes/Live_Jobs/Live_Jobs/*SCANS\ and\ LE\ Docs/_LE_PROOFS_DOCS/JEM_lj/JEM/0002_OXO_CorkScrew/3\ Delivery/GG_Double\ Lever\ Waiters\ Corkscrew_072613_Mike_RETOUCHED/gg_3110200_2_V3_Final.tif

不幸的是,提供给我的路径没有得到适当的转义,而且我在python中很难正确转义。也许python不是最好的工具,但是我喜欢它的灵活性-它允许我扩展我所写的任何东西

使用regex escape函数转义字符太多,pipes.quote方法不会转义空格,如果使用regex将“”替换为“\”,则最终会得到

/Volumes/Live_Jobs/Live_Jobs/*SCANS\\ and\\ LE\\ Docs/_LE_PROOFS_DOCS/JEM_lj/JEM/0002_OXO_CorkScrew/3\\ Delivery/GG_Double\\ Lever\\ Waiters\\ Corkscrew_072613_Mike_RETOUCHED/gg_3110200_2_V3_Final.tif

它们是双转义的,不会传递给像os.path.getsize()这样的python函数。

我做错什么了??


Tags: and文件工具路径lelivedocsjobs
2条回答

试试这个:

  myfile = open(r'c:\tmp\junkpythonfile','w')

“r”代表原始字符串。

您也可以使用

myfile = open('c:\\tmp\\junkpythonfile','w')

如果从文件中读取路径并将其传递给os.path.getsize之类的函数,则不需要对其进行转义。例如:

>>> with open('name with spaces', 'w') as f:
...     f.write('abc\n')
>>> os.path.getsize('name with spaces')
4

实际上,Python中只有少数函数需要空格转义,这可能是因为它们将字符串传递给shell(比如os.system),或者是因为它们试图代表您执行类似shell的解析(比如subprocess.foo使用arg字符串而不是arg列表)。


所以,假设logfile.txt看起来是这样的:

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif

……那么这样的事情就行了:

with open('logfile.txt') as logf:
    for line in logf:
        with open(line.rstrip()) as f:
            do_something_with_tiff_file(f)

注意示例中的那些*字符,如果这些是glob模式,也可以:

with open('logfile.txt') as logf:
    for line in logf:
        for path in glob.glob(line.rstrip()):
            with open(path) as f:
                do_something_with_tiff_file(f)

如果您的问题与您所描述的完全相反,并且文件中充满了转义的字符串,并且您希望对它们进行重新转义,decode('string_escape')将撤消Python样式的转义,并且有不同的函数来撤消不同类型的转义,但是如果不知道你想撤销哪种逃逸,很难说你想要哪种功能

相关问题 更多 >

    热门问题