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()