Как мне создать новый столбец и написать сокращения для каждой соответствующей записи аэропорта с использованием Python в файле CSV?
У меня есть файл CSV аэропортов, и я хочу, чтобы названия аэропортов были вформа аббревиатуры, так что я могу отображать их на карте более компактно, с символом аэропорта, показывающим, что это такое.
Примером может служить следующий пример:
['Bradley Sky Ranch',«Аэропорт острова огня», «Муниципальный аэропорт Палмера»]
в это: ['BSR', 'FIA', 'PMA']
Далее, как бы вы поставили '.'период пунктуации между каждой буквой аббревиатуры?
Я думаю, что это будет + "." +
или что-то с ".".join
?
Наконец, выгода будет, если есть способ избавиться от слова «Аэропорт», чтобы каждыйаббревиатура не заканчивается на «А»?
Например, что-то вроде .strip
'Аэропорт' ... но это не главная цель.
Нумерованный список ниже показывает примеры кода, который у меня есть, но у меня нет последовательного решения,Поэтому, пожалуйста, используйте только то, что имеет смысл, а если нет, я бы хотел узнать более эффективный синтаксис!
[Исходные данные аэропорта взяты из Живого Атласа ESRI.] У меня есть новое поле / столбец под названием«NameAbbrev», в которое я хочу записать аббревиатуры, но я сделал это в ArcPro, который по существу содержит интерфейс черного ящика для вычисления новых полей.
Sidenote: Почему я публикую в SO, а неGeoNet, если это связано с картой?Обратите внимание, что моя цель - использовать Python, а не спрашивать о ArcPy.Я думаю, что основной принцип основан на Python для работы с CSV-файлом (тогда как ArcPy будет работать с классом объектов, и вам придется использовать функции, назначенные ESRI).И SO достигает более широкой аудитории экспертов по Python.
1) До сих пор я сталкивался с тем, как превратить строку в аббревиатуру, которая прекрасно работает с одной строкой, а не списком: Создание аббревиатур в Python
acronym = "".join(word[0] for word in test.upper().split())
2) и попытка разбить элементы в списке, или как выполнить readlines для файла CSV на основе примера (не моего): Ошибка атрибута: у объекта 'list' нет атрибута 'split'
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) Кроме того, я смог использовать панд для распечатки только списка названий аэропортов в список:
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) В прошлом я также мог использовать курсор поиска и запись, но я не знаю, как именно применять эти методы.(несвязанный пример):
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()
Есть ли более простой способ объединить эти идеи и получить столбец акронимов, который я хочу?Или есть альтернативный способ?