我需要知道通过Python是否可以完成以下任务。
我有一个4300个地址的列表,每个地址涵盖一系列地址,如下所示:
我想把第一个地址和最后一个地址分开。因此,以1为例,我需要输出给我8519 S百老汇和8521 S百老汇,每个都在自己的行列。
在某些情况下,比如1和3,我只需要第一个数字的前两位数就可以完成第二个地址。我尝试在Excel中使用文本到列(-),然后连接和离开(单元格,2),但是对于像2和4这样的实例,我没有得到正确的地址,因为我需要地址的前三位数。有任何方法可以编写python脚本来解决这个问题吗?
发布于 2018-11-25 03:28:04
试试下面的代码:
addresses=["8519-21 S Broadway","8700-6 Riverview Blvd"]
output=[]
for i in addresses:
output.append(i[0:i.find('-')]+i[i.find(' '):])
numEnd=i[i.find('-')+1:i.find(' ')]
numStart=i[0:i.find('-')-len(numEnd)]+numEnd+i[i.find(' '):]
output.append(numStart)
print(output)其中,addresses是以您给定的格式列出的地址范围列表,而output是您想要的数据。
发布于 2018-11-25 04:33:01
假设您的输入.csv文件如下所示:
Address
8519-21 S Broadway
8700-6 Riverview Blvd
822-4 Angelica St
8442-6 N Broadway你想让它看起来像这样
First Address,Last Address
8519 S Broadway,8521 S Broadway
8700 Riverview Blvd,8706 Riverview Blvd
822 Angelica St,824 Angelica St
8442 N Broadway,8446 N Broadway您可以通过使用csv模块来实现这一点:
from csv import writer
# open both input and output csv
with open("addresses.csv") as csv_in, open("output.csv", "w", newline="") as csv_out:
csv_writer = writer(csv_out)
# Skip 'Address' header
next(csv_in)
# Write new headers
csv_writer.writerow(["First Address", "Last Address"])
# Go through each line in csv
for line in csv_in:
# Split ranges from rest of line
ranges, *rest = line.split()
# Split ranges themselves
start, end = ranges.split("-")
# Get difference between length of numbers
diff = len(start) - len(end)
# Create new end address
end = start[:diff] + end
# Write new lines to output csv
csv_writer.writerow([" ".join([start, *rest]), " ".join([end, *rest])])将您的结果输出到output.csv中。
发布于 2018-12-04 21:45:11
谢谢大家的帮助和建议。这就是我最后处理它的方式:
import re
import csv
from csv import DictReader
dash_add = []
def get_address_list(file):
with open(file) as f:
reader = csv.DictReader(f)
for row in reader:
adds = row['Siteaddr']
if "-" in adds:
dash_add.append(adds)
z = []
def get_formatted_address(address):
numeric = address.split(" ")[0]
text = address.replace(numeric, "").strip()
start = numeric.split("-")[0]
end = numeric.split("-")[1]
end = start[:-len(end)] + end
return [start + " " + text, end + " " + text]
get_address_list('./data/map_data_112318.csv')
[z.extend(get_formatted_address(i)) for i in dash_add]
with open('formatted_addresses.csv', 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['Address'])
for v in z:
writer.writerows([[v]])https://stackoverflow.com/questions/53464328
复制相似问题