使用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输出将类似于上述数据的行:
^{pr2}$我应该使用代码生成工具直接解析上面的语句来获取数据吗?哪种Python方法最有效地将数千个Javascript文件中包含的数据转换为csv表格格式?在
更新:
理想情况下,我希望解决方案将JavaScript语句解析为Python对象,然后将其存储到CSV中,以最大程度地独立于输入脚本代码的排序和格式化
如果每个酒店在您的文件中声明了每个字段(即,如果所有酒店的行数相同,即使其中一些是空的),您可以尝试使用一个简单的正则表达式来提取每个由引号(“xxx”)包围的值,然后按数字分组(例如,将每5个字段分组为一行,然后添加换行符)。在
一个简单的正则表达式应该是
["'][^"']*["']
(EDIT:这是因为我看到一些文件(例如Phone)使用单引号,其余的使用引号)。在要进行搜索,请使用
findall
:如果这是你必须经常做的事情,并且你想让这个过程完全自动化,我想最简单的方法就是使用Python解析文件,然后使用csv Python module写入csv。在
您的代码可能看起来像这样:
请注意,我还没有测试过这段代码,它只是为了帮助您并为您指出正确的方向,它不是完整的解决方案。在
我建议使用正则表达式来选择所有“hotel[#]…”行,然后将所有结果添加到字典中。然后,使用字典,输出到CSV文件。以下措施应该有效:
现在有了一个包含属性的酒店字典,该字典按Javascript中的ID分组,以及输出文件“酒店.csv“(标题行和正确转义)。我确实做过一些事情,比如命名组,其实这是不必要的,但我发现这更像是自我评论。在
需要注意的是,如果同一个组在Javascript中提供了两次,比如hotelPhone,那么最后一个组是唯一存储的组。在
在处理这类问题时,这取决于你和你的判断,你需要多大的宽容和卫生设施。您可能需要修改正则表达式来处理不在提供的小示例中的示例(例如,更改捕获组,将匹配限制为行首的示例,等等);或者转义换行字符,如电话号码中的字符);或者去掉某些文本(如电话号码中的“phone:”)。我们没有办法知道这一点,所以记住这一点。在
干杯!在
相关问题 更多 >
编程相关推荐