从文件中读取行并在Python中拆分它们

时间:2017-03-19 20:37:35

标签: python matrix split

我有一项从文件中读取数据的任务。 这是第一个文件:

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个。我当时正在寻找互联网上的解决方案,但我找不到任何东西。

谢谢!

6 个答案:

答案 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)])

DEMO

相关问题