gpt4 book ai didi

python - 将硬编码初始化值转换为 CSV

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:41 25 4
gpt4 key购买 nike

使用 Python,我想从一堆包含硬编码数据的 javascript 文件中将如下所示的数据行提取到 csv 文件,如下所示:

....html code....hotels[0] = new hotelData();hotels[0].hotelName = "MANHATTAN";hotels[0].hotelPhone = "";hotels[0].hotelSalesPhone = "";hotels[0].hotelPhone = 'Phone: 888-350-6432
';hotels[0].hotelStreet = "787 11TH AVENUE";hotels[0].hotelCity = "NEW YORK";hotels[0].hotelState = "NY";hotels[0].hotelZip = "10019";hotels[0].hotelId = "51543";hotels[0].hotelLat = "40.7686";;hotels[0].hotelLong = "-73.992645";;hotels[1] = new hotelData();hotels[1].hotelName = "KOEPPEL";hotels[1].hotelPhone = "";hotels[1].hotelSalesPhone = "";hotels[1].hotelPhone = 'Phone: 718-721-9100
';hotels[1].hotelStreet = "57-01 NORTHERN BLVD.";hotels[1].hotelCity = "WOODSIDE";hotels[1].hotelState = "NY";hotels[1].hotelZip = "11377";hotels[1].hotelId = "51582";hotels[1].hotelLat = "40.75362";;hotels[1].hotelLong = "-73.90366";; var mykey = "AlvQ9gNhp7oNuvjhkalD4OWVs_9LvGHg0ZLG9cWwRdAUbsy-ZIW1N9uVSU0V4X-8"; var map = null; var pins = null; var i = null; var boxes = new Array(); var currentBox = null; var mapOptions = { credentials: mykey, enableSearchLogo: false, showMapTypeSelector: false, enableClickableLogo: false }.....html code .....

因此,所需的 csv 输出将类似于上述数据的行:

MANHATTAN,,,Phone: 888-350-6432 ...KOEPPEL,,,Phone: 718-721-9100 ...

是否应该使用代码生成工具直接解析上述语句来获取数据?将数千个 Javascript 文件中包含的此类数据转换为 csv 表格格式的最有效的 Python 方法是什么?

更新:

理想情况下,我希望解决方案将 JavaScript 语句解析为 Python 对象,然后将其存储到 CSV,以获得最大程度的独立性,不受输入脚本代码的排序和格式化的影响

最佳答案

我建议使用正则表达式来挑选所有“hotel[#]. ...”行,然后将所有结果添加到字典中。然后,使用字典,输出到 CSV 文件。以下内容应该有效:

import re
import csv


src_text = your_javascript_text
p = re.compile(r'hotels\[(?P<hotelid>\d+)\].(?P<attr>\w+) = ("|\')(?P<attr_val>.*?)("|\');', re.DOTALL)

hotels = {}
fieldnames = []
for result in [m.groupdict() for m in p.finditer(src_text)]:
if int(result['hotelid']) not in hotels:
hotels[int(result['hotelid'])] = {}
if result['attr'] not in fieldnames:
fieldnames.append(result['attr'])

hotels[int(result['hotelid'])][result['attr']] = result['attr_val']

output = open('hotels.csv','wb')
csv_writer = csv.DictWriter(output, delimiter=',', fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
csv_writer.writerow(dict((f,f) for f in fieldnames))
for hotel in hotels.items():
csv_writer.writerow(hotel[1])

您现在拥有一个带有属性的酒店字典,按 Javascript 中的 ID 分组,以及输出文件“hotels.csv”(带有标题行和正确的转义)。我确实做了诸如命名组之类的事情,这些事情实际上没有必要,但发现它更具 self 评论性。

需要注意的是,如果在 Javascript 中提供了两次相同的组(例如 hotelPhone),则仅存储最后一个组。

在处理此类问题时,取决于您和您的判断,您需要多少宽容和卫生。您可能需要修改正则表达式以处理不提供小样本的示例(即捕获组的更改、将匹配限制为行开头的匹配等);或转义换行符,例如电话号码中的换行符);或删除某些文本(例如电话号码中的“电话:”)。我们没有真正的方法可以知道这一点,所以请记住这一点。

干杯!

关于python - 将硬编码初始化值转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17321783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com