在Python列表中为每个机场都做缩写吗?

时间:2019-03-16 01:41:52

标签: python list csv abbreviation acronym

如何创建一个新列,并使用Python在csv文件中为每个机场记录写首字母缩写词?

我有一个机场的csv文件,并且我希望机场的名称使用首字母缩写形式,以便我可以在地图上更紧凑地显示它们,而机场符号则显示了它的含义。

示例是该示例列表:

[“布拉德利空中牧场”,“火岛机场”,“帕尔默市立机场”]

改为:['B.S.R','F.I.A。','P.M.A。']

接下来,您将如何放置“。”每个缩写字母之间的句点标点符号?

我认为是+ "." +还是".".join的东西?

最后,如果有一种方法可以摆脱“机场”一词,使每个首字母缩略词都不以“ A”结尾,那么将是一个好处。

例如,类似.strip“机场”之类的东西……但这不是主要目标。

下面的编号列表显示了我拥有的代码示例,但是我没有一致的解决方案。因此,请只讲有意义的话,否则,我想学习更有效的语法!

[原始机场数据来自ESRI Living Atlas。]我有一个名为'NameAbbrev'的新字段/列,我想将首字母缩略词写到其中,但是我在ArcPro中做到了这一点,它实际上包含一个黑匣子界面用于计算新字段。

边注:如果这与地图相关,为什么我要张贴到SO而不是GeoNet?请注意,我的目标是使用python,而不是问ArcPy。我认为其基本原理是基于python的csv文件操作(而ArcPy将在要素类上操作,而您必须使用ESRI指定的功能)。这样一来,Python专家的受众就更加广泛了。

1)到目前为止,我已经遇到了如何将字符串转换为首字母缩写词的方法,该方法在单个字符串而不是列表上很有效: Creating acronyms in Python

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

2)并尝试根据示例(不是我的)拆分列表中的项目,或如何在csv文件上进行读取行:Attribute Error: 'list' object has no attribute '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)我过去也可以使用搜索光标和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()

是否有更简单的方法来组合这些想法并获得我想要的缩写列?还是有另一种方法?

3 个答案:

答案 0 :(得分:1)

可以使用list comprehensionstr.joinfilter非常简单地完成此操作:

>>> data = ['Bradley Sky Ranch', 'Fire Island Airport', 'Palmer Municipal Airport']
>>> ['.'.join(filter(str.isupper, name)) for name in data]
['B.S.R', 'F.I.A', 'P.M.A']

答案 1 :(得分:0)

我不知道并且实际上没有正确理解您想要的东西,但是据我了解,您想生成您的字符串列表的首字母缩写 (每个单词的第一个字符)。那么我的以下带有几个循环的解决方案呢?您可以使用list comprehensionfilter或其他python很酷的功能来进一步实现您想要的功能。 让我知道我是否想念任何东西

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

答案 2 :(得分:0)

最短的答案

您可以使用for循环遍历列表中的每个字符串,然后可以将每个结果添加到新列表中。如果需要,可以将其转换为功能。

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

air_acronyms = []
for airport in airports:
    words = airport.split()
    letters = [word[0] for word in words]
    air_acronyms.append(".".join(letters))

print(air_acronyms)

输出

['B.S.R', 'F.I.A', 'P.M.A']