我有一项从文件中读取数据的任务。 这是第一个文件:
10001-31021 Nagy Árpád 2015.12.30. 524432
10001-31121 Zagyva László Pál 2016.03.21. 765432
10012-34321 Acél Tibor 2016.02.20. 231231
10201-11021 Lakatos Pál 2016.01.10. 2310456
10210-41011 Nagy Árpád 2016.02.03. 323532
我必须使用这些信息。我的问题是如何拆分它们并将它们放入二维矩阵中。主要问题是有些名字有3个字,有些有2个。我当时正在寻找互联网上的解决方案,但我找不到任何东西。
谢谢!
答案 0 :(得分:1)
您可以尝试使用索引构建它(如果它们将在每行中位于相同位置),而不是使用正则表达式。
a = """10001-31021 Nagy Árpád 2015.12.30. 524432
10001-31121 Zagyva László Pál 2016.03.21. 765432
10012-34321 Acél Tibor 2016.02.20. 231231
10201-11021 Lakatos Pál 2016.01.10. 2310456
10210-41011 Nagy Árpád 2016.02.03. 323532"""
def add_it(lines):
matrix =[]
for i in lines:
row = []
b = i.split(" ")
row.append(b.pop(0))
row.append(b.pop(-2))
row.append(b.pop(-1))
row.insert(1, (" ".join(b)).strip())
matrix.append(row)
return matrix
print(add_it(a.split("\n")))
您可以尝试online
答案 1 :(得分:0)
如果您确定其余数据列的模式,可以执行以下操作:
text = "10001-31021 Nagy Árpád 2015.12.30. 524432"
text_list = test.split()
result = [text_list[0], ' '.join(text_list[1:-2]), text_list[-2], text_list[-1]]
print(result)
以上代码将导致:
['10001-31021', 'Nagy \xc3\x81rp\xc3\xa1d', '2015.12.30.', '524432']
答案 2 :(得分:0)
该文件的唯一问题是名称。
首先,你要像我们一样正常地进行拆分方法。
如果您观察,行[1:-2]是您需要的名称。
答案 3 :(得分:0)
也许您可以观察到每行的第一个和最后两个元素是固定的,所以:
line.split()[:1] # first element
line.split()[-2:] # last two elements
line.split()[1:-2] # middle elements
答案 4 :(得分:0)
这是使用正则表达式的可能解决方案:
import re
data = []
with open("x") as f:
for line in f:
match = re.fullmatch('([^ ]+) (.*) ([^ ]+) ([^ ]+)', line.strip())
data.append([match.group(1), match.group(2), match.group(3), match.group(4)])
data
看起来像这样:
[
['10001-31021', 'Nagy Árpád', '2015.12.30.', '524432'],
['10001-31121', 'Zagyva László Pál', '2016.03.21.', '765432'],
['10012-34321', 'Acél Tibor', '2016.02.20.', '231231'],
['10201-11021', 'Lakatos Pál', '2016.01.10.', '2310456'],
['10210-41011', 'Nagy Árpád', '2016.02.03.', '323532']
]
答案 5 :(得分:0)
使用正则表达式,您可以尝试:
import re
subject = """10001-31021 Nagy Árpád 2015.12.30. 524432
10001-31121 Zagyva László Pál 2016.03.21. 765432
10012-34321 Acél Tibor 2016.02.20. 231231
10201-11021 Lakatos Pál 2016.01.10. 2310456
10210-41011 Nagy Árpád 2016.02.03. 323532"""
lines = subject.split("\n")
results_list = []
for line in lines:
p = re.search(r"^([\d-]+)\s+([A-zÀ-ÿ\s]+)\s+([\d.]+)\s+([\d]+)", line)
if p:
results_list.append([p.group(1), p.group(2), p.group(3), p.group(4)])