如何在csv文件中进行循环?

时间:2019-06-26 12:39:26

标签: python html csv

我不希望一次又一次地写入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)

1 个答案:

答案 0 :(得分:0)

我认为回答您的紧迫问题有两个关键。第一个是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数据测试过此代码中的任何一个,因此您可能必须进行一些清理。但是至少它应该为您指明正确的方向。