gpt4 book ai didi

python - 这个 python 脚本可以缩短/优化,如何?

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:26 25 4
gpt4 key购买 nike

我还不习惯用 python 方式做事,但我几乎可以肯定以下脚本可以被压缩。我不是在这里寻找速度优化,我正在寻找更具可读性的代码。让它变慢,但有什么方法可以让它看起来更像 Python。

我只是读入一个包含邮政编码的 csv 文件,并用 23 列填充数据库。很多打字。我也不喜欢像行索引这样的硬编码。此外,multis = '%s, '*23 后跟 multis = multis[:-2] 感觉很脏。

期待看到你们中的一些人能想出什么。

#!/usr/bin/python

import csv
import MySQLdb

db = MySQLdb.connect(host="localhost", user="root", db="test")
c = db.cursor()
f_csv = 'zip-codes-database-STANDARD.csv'
csvReader = csv.reader(open(f_csv))
ziplist = []
multis = '%s, '*23
multis = multis[:-2]
for row in csvReader:
c.execute("""INSERT INTO lock_zipcodes_complete
(`zipcode`, `city`, `state`, `county`, `areacode`,
`citytype`, `city_alias_abbreviation`,
`city_alias_name`, `latitude`, `longitude`, `timezone`,
`elevation`, `county_fips`, `dst`,
`preferred_last_line_key`, `classification_code`,
`multicounty`, `state_fips`, `city_state_key`,
`city_alias_code`, `primary_record`, `city_mixed_case`,
`city_alias_mixed_case`) VALUES(""" + multis + ')',
(row[0], row[1], row[2], row[3], row[4], row[5], row[6],
row[7], row[8], row[9], row[10], row[11], row[12],
row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22]))

最佳答案

这部分:

multis = '%s, '*23
multis = multis[:-2]

应该是

multis = ', '.join(['%s'] * 23)

ziplist 没有被使用,所以你可以删除设置它的行。

            (row[0], row[1], row[2], row[3], row[4], row[5], row[6],
row[7], row[8], row[9], row[10], row[11], row[12],
row[13], row[14], row[15], row[16], row[17], row[18],
row[19], row[20], row[21], row[22])

应该只是 tuple(row)(对于您使用它的特定方式,只需 row 即可)。

INSERT 中列名的显式列表令人不快,但如果您不确定这是否是该数据库表中的所有列或顺序是否正确(或者,当然,如果您确定两者都不是这种情况);但这是 SQL - vs - CSV“阻抗不匹配”问题,而不是 Python 问题;-)。

整个循环:

for row in csvReader:
c.execute(sql_statement, row)

可以选择进一步压缩为:

c.executemany(sql_statement, csvReader)

关于python - 这个 python 脚本可以缩短/优化,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925999/

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