如何将CSV文件中的行存储到Python中并使用HTML打印数据

时间:2011-10-22 04:09:20

标签: python html excel csv

基本上我的问题是:我有一个包含Southpark字符信息的CSV excel文件,我和我有一个HTML模板,我要做的就是为每个字符按行(存储在列表中)获取数据并使用给定的HTML模板实现了数据创建5个单独的HTML页面,其中包含字符姓氏。

以下是CSV文件的图片:i.imgur.com/rcIPW.png

这是我到目前为止所做的:

askfile = raw_input("What is the filename?")

southpark = []

filename = open(askfile, 'rU')

for row in filename:
    print row[0:105]

filename.close()

上面打印出五行中IDLE shell的所有信息,但我必须找到一种方法来分隔每一行和列并将其存储到一个列表中(我不知道该怎么做)。它是非常基本的代码我知道我试图找出一种方法来存储行和列,然后我将不得不使用函数(def)来首先将数据分配给HTML模板和然后从该数据/模板中创建一个HTML文件。到目前为止,我尝试了一个菜鸟,但我只是不了解这些内容。

我不允许使用任何可下载的模块,但我可以使用Python内置的东西,比如import csv或whatnot,但实际上它应该用一些函数,列表,字符串和循环来编写..

一旦我弄清楚如何分隔行和列并存储它们,我就可以在HTML模板中实现并创建文件。

我没有尝试为我完成我的硬件,只是因为我非常喜欢编程,所以任何帮助都表示赞赏!

BTW我正在使用Python 2.7.2,如果你想要DL文件,请点击here


更新:

好的,非常感谢!这有助于我了解每行打印的内容以及程序正在读取的信息。既然我必须在这个程序中使用函数,这就是我的想法。

每一行(0-6)打印出单独的值,但只有打印行功能打印出一个字符及其所需的所有相应值。我想要的是打印出像" print row"但我必须将这5个字符中的每一个都存储在一个单独的列表中。

基本上"打印行"使用每个相应的属性打印出所有5个字符,如何将它们分成5个变量并将它们存储为列表?

当我打印行[0]时,它只打印出名称,或打印行1仅打印DOB。我正在考虑创建一个def函数,只需要print" row"并在循环中拆分为5个变量,然后另一个def函数获取这些变量/数据列表并将它们与HTML模板组合在一起,最后我必须弄清楚如何在Python中创建HTML文件。

很抱歉,如果我只是想弄清楚这一切听起来很混乱。这是我的代码,现在它给出了一个错误,即解压缩的值太多,但我只是试图摆弄并尝试不同的东西,看看它们是否有效。基于我上面想做的事情,我可能不得不删除所有这些代码,并找到一种方法用列表类型函数重写它,如.append或.strip等,我不是很熟悉..

import csv

original = file('southpark.csv', 'rU')

reader = csv.reader(original)

# List of Data
name, dob, descript, phrase, personality, character, apparel = []

count = 0

def southparkinfo():
for row in reader:
    count += 1
    if count == 0:
        row[0] = name
        print row[0] # Name (ex. Stan Marsh)
        print "----------------"
    elif count == 1:
        row[1] = dob
        print row[1] # DOB
        print "----------------"
    elif count == 2:
        row[2] = descript
        print row[2] # Descriptive saying (ex. Respect My Authoritah!)
        print "----------------"
    elif count == 3:
        row[3] = phrase
        print row[3] # Catch Phrase (ex. Mooom!)
        print "----------------"
    elif count == 4:
        row[4] = personality
        print row[4] # Personality (ex. Jewish)
        print "----------------"
    elif count == 5:
        row[5] = character
        print row[5] # Characteristic (ex. Politically incorrect)
        print "----------------"
    elif count == 6:
        row[6] = apparel
        print row[6] # Apparel (ex. red gloves)
    return

reader.close()

1 个答案:

答案 0 :(得分:6)

首先,请查看CSV docs

了解基础知识后,请查看此代码。这应该让你开始走正确的道路:

import csv

original = file('southpark.csv', 'rU')
reader = csv.reader(original)

for row in reader:
    #will print each row by itself (all columns from names up to what they wear)
    print row
    print "-----------------"
    #will print first column (character names only)
    print row[0]

您希望import csv模块,以便您可以使用CSV文件类型。以通用换行模式打开文件,并使用csv.reader读取它。然后,您可以使用for循环开始迭代行,具体取决于您想要的内容。第一个print row将打印所有单个字符数据的单行(即:从名称到服装类型的所有内容),如下所示:

['Stan Marsh', 'DOB: October 19th', 'Dude!', 'Aww #$%^!', 'Star Quarterback', 'Wendy', 'red gloves']

-----------------
['Kyle Broflovski', 'DOB: May 26th', 'Kick the baby!', 'You ***!', 'Jewish', 'Canadian', 'Ushanka']
-----------------
['Eric Theodore Cartman', 'DOB: July 1', 'Respect My Authroitah!', 'Mooom!', 'Big-boned', 'Political
ly incorrect', 'Knit-cap!']
-----------------
['Kenny McCormick', 'DOB: March 22', 'DOD: Every other week', 'Mmff Mmff', 'MMMFFF!!!', 'Mysterion!'
, 'Orange Parka']
-----------------
['Leopold Butters Stotch', 'DOB:Younger than the others!', 'The 4th friend', 'Professor chaos', 'stu
tter', 'innocent', 'nerdy']
-----------------

最后,第二个语句print row[0]将仅为您提供字符名称。您可以更改号码,并且您可以根据需要获取其他数据。请记住,在CSV文件中,所有内容都从0开始,因此在您的情况下,您最多只能达到6,因为A=0, B=1, C=2, etc...要更清楚地查看这些输出,最好是注释掉其中一个print声明,这样你就可以更清楚地了解你正在抓住的东西。

-----------------
Stan Marsh
-----------------
Kyle Broflovski
-----------------
Eric Theodore Cartman
-----------------
Kenny McCormick
-----------------
Leopold Butters Stotch

注意我投入了print "-----------------",因此您可以看到不同的输出。 希望这可以帮助您开始。

编辑 回答您的第二个问题:获取所有单个字符信息的最简单方法(尽管可能不是最好的方法)就是做这样的事情:

import csv

original = file('southpark.csv', 'rU')
reader = csv.reader(original)

stan = reader.next()
kyle = reader.next()
eric = reader.next()
kenny = reader.next()
butters = reader.next()

print eric

输出:

['Eric Theodore Cartman', 'DOB: July 1', 'Respect My Authroitah!', 'Mooom!', 'Big-boned', 'Politically incorrect', 'Knit-cap!']

请注意,如果您的CSV被修改为移动了字符的顺序(例如:黄油被移动到顶部),您将输出另一个字符的信息。