有没有一种方法可以使用python中的split方法将一行拆分为多个字符



到目前为止,我有这段代码来分割我的文件行。

with open("example.dat", 'r') as f:
lines = [line.strip().split(',') for line in f]
print(lines)

我想分割代码,这样我就有了一个多维数组,其中的数据表示为[城市、州、纬度、经度、人口]。然而,split方法只需要一个参数,所以经过一些研究,我重新导入并尝试使用它,因为我正在处理的文件有一个模式。但是,运行结果并没有按照我希望的方式将数据从文件中分离到数组中。

例如,如果文件具有信息

纽约州纽约市[40,74]111000000

上面的代码将打印[["纽约市"、"纽约[40"、"70"11000000"]等]。

我想把它打印出来

由于我没有得到我想要的结果,我尝试了以下代码。

import re
with open("example.dat", 'r') as f:
lines = [re.split(r',[,]', line) for line in f]
print(lines)

is代码以这种方式输出数据:[[纽约市,NY[40,70]11100000\n']等]

那么,我可以使用re或split方法按不同的字符分割一行吗?

最简单的解决方案可能是将不同的拆分字符扁平化为一个字符:

with open("example.dat", "r") as fh:
lines = []
for line in fh:
lines.append( line.strip().replace("[", ",").replace("]", ",").split(",") )

您可以在正则表达式中使用命名组来更正确地提取信息(请在此处阅读更多信息:https://www.regular-expressions.info/refext.html):

import re
pat = r"(?P<city>[^,]*), (?P<state>[wW]*)[(?P<lat>d+),(?P<lon>d+)](?P<pop>d+)"
pat = re.compile(pat, re.VERBOSE)
city = match.group("city")
state = match.group("state")
lat = float(match.group("lat"))
lon = float(match.group("lon"))
population = int(match.group("pop"))
line = [city, state, lat, lon, population)
# => ['New York City', ' NY', 40.0, 74.0, 11000000]

Regex在这种情况下非常有用:

import re
x = 'New York City, NY[40,74]11000000'
res = re.split(', |[|]|,', x)
print(res)
#####
['New York City', 'NY', '40', '74', '11000000']

最新更新