我不希望line1、line2之类的东西被一遍又一遍地写。如何在其中做一个循环,这样我就不必每次都写东西了?我试过了,但失败了。
from prettytable import PrettyTable
csv_file = open('filo.csv','r')
csv_file = csv_file.readlines()
line1 = csv_file[0]
line1 = line1.split(',')
line2 = csv_file[1]
line2 = line2.split(',')
x = PrettyTable([line1[0],line2[0]])
for a in range(1, len(line1)):
x.add_row([line1[a], line2[a]])
html_code = x.get_html_string()
html_file = open('table.html','w')
html_file = html_file.write(html_code)
发布于 2019-06-27 00:11:00
我认为有两个关键来回答你直接提出的问题。第一个是Python的zip()
函数,它接受一系列序列并对它们进行交织。例如:
>>> list(zip((1,2,3), (4,5,6)))
[(1,4), (2,5), (3,6)]
第二个关键是,在Python中,您可以通过在函数前面加上星号('*')来传递一系列参数。例如:
>>> def add(*args):
return sum(args)
>>> add(1,2,3)
6
>>> numbers = [1,2,3]
>>> add(*numbers)
6
这两个键结合起来可以让您消除大部分笨拙的line1、line2构造。
csv_file = open('filo.csv','r')
csv_file = csv_file.readlines()
line1 = csv_file[0].split(',')
line2 = csv_file[1].split'(',')
interleaved = list(zip(line1, line2))
x = PrettyTable(*interleaved[0])
for pair in interleaved[1:]:
x.add_row(*pair)
# Then go on to generate and write HTML code, as before.
这应该可以解决您当前的问题。此外,您可能希望使用with
语句重写文件的打开和读取,并使用Python's csv
module重写文件的解析。它会让你的代码更干净、更健壮。
import csv
from prettytable import PrettyTable
with open('filo.csv') as csv_file:
myreader = csv.reader(csv_file)
interleaved = list(zip(next(myreader), next(myreader)))
x = PrettyTable(*interleaved[0])
for pair in interleaved[1:]:
x.add_row(*pair)
# and so forth.
就是这样!"line1“和"line2”之类的东西完全消失了。
警告:我没有针对csv数据测试这些代码,所以您可能需要对其进行一些清理。但至少它应该为你指明正确的方向。
https://stackoverflow.com/questions/56773062
复制相似问题