我是一个蟒蛇学习者.如果我在文件中有一行文字看起来像这样
"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)
我只想补充一点,如果你处理看起来像命令行参数的行,那么你可以利用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)
没有正则表达式,没有拆分,只需使用 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)
查找所有正则表达式匹配即可:
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)
| 归档时间: |
|
| 查看次数: |
22069 次 |
| 最近记录: |