0

コンマ区切りのテキスト ファイルがあります。各行の 5 番目のフィールドには、名前と住所の情報が含まれています。名前は、「¬」文字で通りの情報と区切られています。市区町村|都道府県|郵便番号も同じ文字で区切られています。サンプル フィールドは次のようになります

名前をパーツに分割し、都市|州|郵便番号をパーツに分割する必要があります。ただし、名前にはミドル イニシャルがある場合とない場合があるため、

m = l[4].split("¬")
firstName, mi, lastName = m[2].split()

ミドルイニシャルがない場合は機能しません。また、都市の名前にはスペースが含まれる場合と含まれない場合があるため、次のようになります:

city, state, zipCode = m[4].split()

たとえば、都市が「サンアントニオ」または「リオデジャネイロ」の場合は機能しません。

要するに、セクションが常に同じ形式であるとは限らないフィールドのセクションを解析するにはどうすればよいですか?

4

2 に答える 2

3

あなたの例では、「最初のフィールド」、「最後のフィールド」、および「その間のすべて」を取得することで、両方のケースで問題を解決できるようです:

m = line.split("¬")[2].split()
firstname = m[0]
surname = m[-1]
initials = m[1:-1] # Maybe just keep this as a list?

と:

m = line.split("¬")[4].split()
city = ' '.join(m[:-2])
state = m[-2]
zipCode = m[-1]

一般に、先頭と末尾の両方から「固定」フィールドを取得することで、スペースを含む単一のフィールドを処理できます。残ったものは、スペースを含むことができるフィールドです。同じフィールドにスペースを含む 2 つのフィールドがあるとすぐに列、あなたにできることは何もありません。あいまいに定義されています。

使用しているデータ形式では、Robert Van de Graff などのスペースを含む名前または姓を持つ人がいる場合、問題が発生する可能性があります。イニシャルがある場合、Robert J. Van de Graaff などの 1 文字のみを含む単語を検索し、それらを使用して姓と名の開始位置と終了位置を定義することで解決できます。しかし、一般的には問題があるかもしれません。

また、ここには国際化の問題が隠されています。すべての人が「名」を最初に書くわけではありません。姓を最初に書く場合もあります。

于 2010-01-19T21:27:44.190 に答える
0

基本的に、アノンが提案することは、次のように実装できます。

cityInfo = m[4].split()
city, state, zipCode = ' '.join(cityInfo[:-2]), cityInfo[-2], cityInfo[-1])
于 2010-01-19T21:29:09.210 に答える