基本上我的问题是:我有一个包含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()
答案 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被修改为移动了字符的顺序(例如:黄油被移动到顶部),您将输出另一个字符的信息。