为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2021-03-29 18:15:13
我想使用Python从一堆包含硬编码数据的javascript文件中将以下所示的数据行提取到一个csv文件中,如下所示:.... html代码...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 =“纽约”;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 ='电话: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 box = new Array();                var currentBox = null;                var mapOptions = {                凭据:mykey,                enableSearchLogo:否,                showMapTypeSelector:否,                enableClickableLogo:否                }..... html代码.....因此,所需的csv输出将类似于上述数据的行:曼哈顿,电话:888-350-6432 ...KOEPPEL``电话:718-721-9100 ...我是否应该使用代码生成工具直接解析以上语句以获取数据?哪一种最有效的Python方法可将数千个Javascript文件中包含的此类数据转换为csv表格格式?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

如果每个旅馆都在文件中声明了每个字段(即,即使所有旅馆都有相同数量的行,即使其中一些行为空),也可以尝试使用简单的正则表达式来提取用引号引起来的每个值( “ xxx”),然后按数字将其分组(例如,将每5个字段分组为一行,然后添加一个换行符)。


一个有效的简单正则表达式将是["'][^"']*["'](编辑:这是因为我看到某些文件(即Phone)使用单引号,其余使用引号)。


要进行搜索,请使用findall:


compPattern = re.compile(pattern)

results = compPattern.findall(compPattern)


查看完整回答
反对 回复 2021-04-06
?
万千封印

TA贡献1891条经验 获得超3个赞

如果这是您必须常规执行的操作,并且希望使该过程完全自动化,我认为最简单的方法就是使用Python解析文件,然后使用csv Python模块写入csv 。


您的代码可能看起来像这样:


with open("datafile.txt") as f:

    hotel_data = []

    for line in f:

        # Let's make sure the line not empty

        if line:

            if "new hotelData();" in line:

                if hotel_data:

                    write_to_csv(hotel_data)

                    hotel_data = []

        else:

            # Data, still has ending quote and semi colon

            data = line.split("= ")[1]

            # Remove ending quote and semi colon 

            data = data[:-2]

            hotel_data.append(data)


def write_to_csv(hotel_data):

    with open('hotels.csv', 'wb') as csvfile:

        spamwriter = csv.writer(csvfile, delimiter=',',

                                quotechar='""', quoting=csv.QUOTE_MINIMAL)


        spamwriter.writerow(hotel_data)

请注意,我尚未测试此代码,它仅是为了帮助您并为您指明正确的方向,它不是完整的解决方案。


查看完整回答
反对 回复 2021-04-06
  • 3 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信