【问题标题】:Python replace any word starting with 'lat'Python替换任何以'lat'开头的单词
【发布时间】:2018-06-04 12:02:18
【问题描述】:

我收到了许多不同的 csv 文件,每个文件都包含纬度和经度数据。但是它们的标题被称为不同的名称。 现在我真的很想重命名标题,以便它们都被称为相同的。但我不想指定每个可能存在的组合,我只想重命名以“lat”或“lon”开头的每个列标题。

所以我的标题可以是这样的:

  • 文件 1 标头: Lat_WGS84、Lon_WGS84
  • 文件2标题:纬度(°),经度(°)
  • File3 标头: lat、long

现在我的第一个想法是创建一个str.replace('lat*','lat'),但这不起作用,然后我尝试了re.sub() 的多种组合,但它对我不起作用。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你试过什么正则表达式? re.sub("^[Ll]at.*","lat",line) 应该可以工作
  • re.sub(r'lon.\w, ','lon,', str) re.sub('lon.*,' , 'lon,' str) re.sub(' lon*,' , 'lon', str)
  • 您确定只是想将每个文件的第一行替换为lat, long 否?
  • 请通过minimal reproducible exampleedit 提出您的问题。目前还不清楚为什么它不起作用
  • 你为什么需要它?什么时候(在任何处理之前的文件处理)?其他列怎么办?如果多列以 lat 开头(lat_dmslat_dd)怎么办?目前还不清楚...

标签: python


【解决方案1】:

使用re.sub

演示:

import re
s = """File1 header: Lat_WGS84, Lon_WGS84

File2 header: Latitude(°), Longitude(°)

File3 header: lat, long 
"""
s = re.sub("lat.*,", 'lat', s, flags=re.IGNORECASE)
s = re.sub("lon.*", r'lon', s, flags=re.IGNORECASE)
print(s)

输出:

File1 header: lat lon

File2 header: lat lon

File3 header: lat lon

【讨论】:

    【解决方案2】:
    re.sub("^[Ll]at\w+","lat",line)
    

    希望这会有所帮助。同样,您也可以使用经度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多