1

csv ファイルで Python を使用して、新しい列を作成し、それぞれの空港レコードの頭字語を書き込むにはどうすればよいですか?

空港の csv ファイルがあり、空港の名前を頭字語形式にして、空港のシンボルが空港のシンボルを示すように、よりコンパクトに地図上に表示できるようにします。

例としては、次のサンプル リストがあります。

[「ブラッドリー スカイ ランチ」、「ファイヤー アイランド空港」、「パーマー市営空港」]

これに: ['BSR', 'FIA', 'PMA']

次に、「.」をどのように付けますか? 各頭字語文字間のピリオド句読点?

私はそれが+ "." +何かになると思います".".joinか?

最後に、すべての頭字語が「A」で終わらないように「Airport」という単語を削除する方法があれば、メリットはありますか?

たとえば、.strip「空港」のようなものですが、それは主な目的ではありません。

以下の番号付きリストは、私が持っているコードの例を示していますが、一貫した解決策はありません。ですから、意味のあるものだけを取り上げてください。そうでない場合は、より効果的な構文を学びたいと思います!

[元の空港データは ESRI Living Atlas からのものです。] 頭字語を書き込みたい「NameAbbrev」という新しいフィールド/列がありますが、これを ArcPro で行いました。田畑。

補足: これがマップに関連している場合、GeoNet ではなく SO に投稿するのはなぜですか? 私の目標は Python を使用することであり、ArcPy について尋ねているわけではないことに注意してください。基本的な原則は、csv ファイルを操作するための python ベースだと思います (一方、ArcPy はフィーチャクラスを操作し、ESRI 指定の関数を使用する必要があります)。そして、SO はより幅広い Python エキスパートにリーチします。

1) これまでのところ、文字列を頭字語に変換する方法に出くわしました。これは、リストではなく単一の文字列でうまく機能します: Python で頭字語を作成する

acronym = "".join(word[0] for word in test.upper().split())

2)リスト内のアイテムを分割しようとしたか、例に基づいてcsvファイルでreadlinesを実行する方法(私のものではありません):属性エラー:「リスト」オブジェクトには属性「分割」がありません

def getQuakeData():
filename = input("Please enter the quake file: ")
# Use with to make sure the file gets closed
with open(filename, "r") as readfile:
    # no need for readlines; the file is already an iterable of lines
    # also, using generator expressions means no extra copies
    types = (line.split(",") for line in readfile)
    # iterate tuples, instead of two separate iterables, so no need for zip
    xys = ((type[1], type[2]) for type in types)
    for x, y in xys:
        print(x,y)

getQuakeData()

3) また、pandas を使用して、空港名の列だけをリストに出力することができました。

import pandas
colnames = ['OBJECTID', 'POLYGON_ID', 'POLYGON_NM', 'NM_LANGCD', 'FEAT_TYPE', 'DETAIL_CTY', 'FEAT_COD', 'NAME_FIX', 'ORIG_FID', 'NameAbbrev']
data = pandas.read_csv(r'C:\Users\...\AZ_Airports_table.csv', names=colnames)

names = data.NAME_FIX.tolist()
print(names)

#Here is a sample of the list of airport names/print result.
#If you want a sample to demo guidance you could use these names:
#['NAME_FIX', 'Bradley Sky Ranch', 'Fire Island Airport', 'Palmer Municipal Airport', 'Kodiak Airport', 'Nome Airport', 'Kenai Municipal Airport', 'Iliamna Airport', 'Sitka Airport', 'Wrangell Airport', 'Sand Point Airport', 'Unalaska Airport', 'Adak Airport', 'Homer Airport', 'Cold Bay Airport']

4) 過去に検索カーソルと writerow も使用できましたが、これらの方法を正確に適用する方法がわかりません。(無関係な例):

with open(outCsv, 'wb') as ouputCsv:  
writer = csv.writer(outputCsv)  
writer.writerow(fields)  # writes header containing list of fields  
rows = arcpy.da.SearchCursor(fc, field_names=fields)  
for row in rows:  
    writer.writerow(row)  # writes fc contents to output csv  
del rows

5) それで、私はピースを持っていますが、それらをすべて組み合わせる方法や、それらが合うかどうかさえわかりません. これは私のフランケンシュタインのモンスターの解決策ですが、各列を見ようとしているので間違っています!

def getAcronym():
filename = r'C:\Users\...\AZ_Airports_table.csv'
# Use with to make sure the file gets closed
with open(filename, "r") as readfile:
    # no need for readlines; the file is already an iterable of lines
    # also, using generator expressions means no extra copies
    airport = (line.split(",") for line in readfile)
    # iterate tuples, instead of two separate iterables, so no need for zip
    abbreviation = "".join(word[0] for word in airport.upper().split())
    # could also try    filter(str.isupper, line)
print(abbreviation)

getAcronym()

これらのアイデアを組み合わせて、必要な頭字語列を取得する簡単な方法はありますか? または別の方法はありますか?

4

3 に答える 3

0

私はあなたが何を望んでいるのかわかりませんし、実際には正しく理解していませんが、私が理解している限り、すべての単語の最初の文字で文字列のリストの頭字語を生成したいと考えています。それでは、いくつかのループを使用した以下のソリューションはどうですか? または、Python の他のクールな機能を使用して、さらに必要なものを実現できます。何か見逃したら教えてくださいlist comprehensionfilter

input = ['Bradley Sky Ranch', 'Fire Island Airport', 'Palmer Municipal Airport']

output = []
for i in input:
    j =  i.split(' ')
    res = ''
    for k in j:
        res+= k[0] + '.'
    output.append(res)
print(output)  

出力:

['B.S.R.', 'F.I.A.', 'P.M.A.']
于 2019-03-16T02:03:52.307 に答える