Python在引号上拆分字符串

use*_*057 7 python python-2.7

我是一个蟒蛇学习者.如果我在文件中有一行文字看起来像这样

"Y:\ DATA\00001\SERVER\DATA.TXT""V:\ DATA2\00002\SERVER2\DATA2.TXT"

我可以在引号周围分割线条吗?唯一的常量是它们在文件中相对于数据行本身的位置.数据行的范围可以是10到100多个字符(它们是嵌套的网络文件夹).我无法看到我如何使用任何其他方式来分割这些标记,但是我缺乏python知识使得这很困难.我试过了

optfile=line.split("")
Run Code Online (Sandbox Code Playgroud)

和其他变化,但继续获得价值误差:空分离器.我明白为什么会说,我只是不知道如何改变它.任何帮助,一如既往地非常感激.

非常感谢

小智 8

你必须逃避":

input.split("\"")
Run Code Online (Sandbox Code Playgroud)

结果是

['\n',
 'Y:\\DATA\x0001\\SERVER\\DATA.TXT',
 ' ',
 'V:\\DATA2\x0002\\SERVER2\\DATA2.TXT',
 '\n']
Run Code Online (Sandbox Code Playgroud)

要删除生成的空行:

[line for line in [line.strip() for line in input.split("\"")] if line]
Run Code Online (Sandbox Code Playgroud)

结果是

['Y:\\DATA\x0001\\SERVER\\DATA.TXT', 'V:\\DATA2\x0002\\SERVER2\\DATA2.TXT']
Run Code Online (Sandbox Code Playgroud)


Jon*_*nts 6

我只想补充一点,如果你处理看起来像命令行参数的行,那么你可以利用shlex模块:

import shlex

with open('somefile') as fin:
    for line in fin:
        print shlex.split(line)
Run Code Online (Sandbox Code Playgroud)

会给:

['Y:\\DATA\\00001\\SERVER\\DATA.TXT', 'V:\\DATA2\\00002\\SERVER2\\DATA2.TXT']
Run Code Online (Sandbox Code Playgroud)


McK*_*vin 5

没有正则表达式,没有拆分,只需使用 csv.reader

import csv

sample_line = '10.0.0.1 foo "24/Sep/2015:01:08:16 +0800" www.google.com "GET /" -'

def main():
    for l in csv.reader([sample_line], delimiter=' ', quotechar='"'):
        print l
Run Code Online (Sandbox Code Playgroud)

输出是

['10.0.0.1', 'foo', '24/Sep/2015:01:08:16 +0800', 'www.google.com', 'GET /', '-']
Run Code Online (Sandbox Code Playgroud)


Tho*_*ung 3

查找所有正则表达式匹配即可:

input=r'"Y:\DATA\00001\SERVER\DATA.TXT" "V:\DATA2\00002\SERVER2\DATA2.TXT"'

re.findall('".+?"', # or '"[^"]+"', input)
Run Code Online (Sandbox Code Playgroud)

这将返回文件名列表:

["Y:\DATA\00001\SERVER\DATA.TXT", "V:\DATA2\00002\SERVER2\DATA2.TXT"]
Run Code Online (Sandbox Code Playgroud)

要获取不带引号的文件名,请使用:

[f[1:-1] for f in re.findall('".+?"', input)]
Run Code Online (Sandbox Code Playgroud)

或使用re.finditer:

[f.group(1) for f in re.finditer('"(.+?)"', input)]
Run Code Online (Sandbox Code Playgroud)