2017-03-19 9 views
-3

ファイルからデータを読み込むタスクがあります。ファイルから行を読み込んでPythonで分割する

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 

私はこれらに関する情報と仕事をしなければならない: これが最初のファイルです。私の質問は、それらを分割して2次元マトリックスに入れる方法です。主な問題は、いくつかの名前は3つの単語がいくつかあることです2.私は/インターネット上のソリューションを探していたが、私は何かを見つけることができませんでした。

ありがとうございました!

+0

あなたはそれが分割されることを期待するにはどうすればよいですか?このように:["10001-31021"、 "NagyÁrpád"、 "2015.12.30。"、 "524432"]? –

+0

あなた自身の試みをここに示して、あなた自身のコードに関して何が明白に困難であるかを説明してください。あなたの質問に答えたい読者は、あなたの質問にもっと傾けて答えられるでしょう。あなたはあなたの問題のより良い[MCVE]をまとめたいと思っています。 – idjaw

+0

次の構文解析を行うには、regexを使用する必要があります。 –

答えて

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'] 
0

を持つ唯一の問題をファイルには名前が付いています。

まず最初に、私たちが通常どおり行う分割方法を行います。

あなたが確認した場合は、行[1:-2]が必要な名前です。あなたがそう、各行の最初と最後の二つの要素が固定されていることを観察することができます

0

はおそらく:

line.split()[:1] # first element 
line.split()[-2:] # last two elements 
line.split()[1:-2] # middle elements 
+0

迅速な回答ありがとう!本当に良いコミュニティ! – skatejns

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'] 
] 
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

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

関連する問題