我有一个.txt文件,格式为:
AED|784|2|United Arab Emirates dirham|United Arab Emirates
AFN|971|2|Afghan afghani|Afghanistan
ALL|8|2|Albanian lek|Albania
AMD|51|2|Armenian dram|Armenia
ANG|532|2|Netherlands Antillean guilder|Curaçao (CW), Sint Maarten (SX)
我想提取每个被'|'删除的子字符串
例如,
var1,var2,var3,var4 = ""
text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"
text.extract("{0}|{1}|{2}|{3}|{4}", var1, var2, var3, var4)
print(var1) // prints AED
是否有一种简单/有效的方法(可能使用正则表达式)?
答案 0 :(得分:6)
text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"
spl = text.split("|")
var1, var2, var3, var4, var5 = spl
print(var1)
print (spl)
AED
['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates']
答案 1 :(得分:4)
更好的是,不是将CSV-dialect文件作为文本读取,然后尝试弄清楚如何处理它,而是使用csv
模块将其作为CSV-dialect文件读取:
with open(textfile, 'rb') as f:
for row in csv.reader(f, delimiter='|'):
print row[0]
这将打印'AED'
,然后打印'AFN'
,依此类推。
如果您想将其转换为列表列表,那很简单:
with open(textfile, 'rb') as f:
data = list(csv.reader(f, delimiter='|'))
现在data
是:
[['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates'],
['AFN', '971', '2', 'Afghan afghani', 'Afghanistan'],
['ALL', '8', '2', 'Albanian lek', 'Albania'],
['AMD', '51', '2', 'Armenian dram', 'Armenia'],
['ANG', '532', '2', 'Netherlands Antillean guilder',
'Curaçao (CW), Sint Maarten (SX)']]
这里的主要优点是,如果您后来意识到您的文件有例如某些列值必须被引用,或者可选列留在最后,或者几乎没有其他任何您未提前预料到的当时,您不必返回并编写新的解析器,只需确定需要更改的dialect parameter。
或者,如果您希望按名称而不是索引访问列,则可以切换到DictReader
,然后返回字典而不是列表。
答案 2 :(得分:0)
通过python的re模块,
>>> import re
>>> text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"
>>> m = re.findall(r'([^|]+)', text)
>>> m
['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates']