我正在玩Python,并且遇到了问题。 我有其中每个字符串被构造这样一个大的数据文件:Python正则表达式将字符串拆分为5个部分
"id";"userid";"userstat";"message";"2013-10-19 06:33:20 (date)"
我需要每行分成5枚,分号作为分隔符。但在同一时间内的报价。
这很难解释,所以我希望你明白我的意思。
我正在玩Python,并且遇到了问题。 我有其中每个字符串被构造这样一个大的数据文件:Python正则表达式将字符串拆分为5个部分
"id";"userid";"userstat";"message";"2013-10-19 06:33:20 (date)"
我需要每行分成5枚,分号作为分隔符。但在同一时间内的报价。
这很难解释,所以我希望你明白我的意思。
使用str.split
,无需正则表达式:
>>> strs = '"id";"userid";"userstat";"message";"2013-10-19 06:33:20 (date)"'
>>> strs.split(';')
['"id"', '"userid"', '"userstat"', '"message"', '"2013-10-19 06:33:20 (date)"']
如果你不想让双引号为好,然后:
>>> [x.strip('"') for x in strs.split(';')]
['id', 'userid', 'userstat', 'message', '2013-10-19 06:33:20 (date)']
所以这样做就意味着我可以选择像这样的每个部分:x [0]为id,x [1]为userid,依此类推?我需要每个部分都可以管理。 – BoinQ
@BoinQ是的,您也可以使用序列解包来将列表项分配给变量:'idx,userid,stat,msg,dt = strs.split(';')'。顺便说一句DSM的[解决方案](http://stackoverflow.com/a/19500522/846892),它比我的解决方案更好。 –
您可以通过";"
你分裂的情况下,也考虑使用正则表达式,如^("[^"]+");("[^"]+");("[^"]+");("[^"]+");("[^"]+")$
我想我会尽量避免正则表达式,但感谢回答 – BoinQ
考虑可能性在消息中有';',然后使用正则表达式 –
该格式看起来很像ssv
:分号分隔的值(如“csv “,但用分号而不是逗号)。我们可以使用csv
模块来处理这个问题:
import csv
with open("yourfile.txt", "rb") as infile:
reader = csv.reader(infile, delimiter=";")
for row in reader:
print row
产生
['id', 'userid', 'userstat', 'message', '2013-10-19 06:33:20 (date)']
一个优点的这种方法是,它会自动正确处理所引用的数据中分号的情况。
您还可以解析纯字符串:'reader = csv.reader(['“id “;”userid“;”userstat“;”message“;”2013-10-19 06:33:20(date)“'],delimiter =';')'。另外请注意,'csv'库不能很好地与'unicode'搭配使用。 –
你需要哪种形式的最终产品?数组? – jwarner112