Python脚本读取csv文件

23 浏览
0 Comments

Python脚本读取csv文件

以上所有内容都是从一个Excel表格中提取的值,转换为CSV格式后显示的内容。

正如您注意到的,标题包含七个列,下面的数据会有所变化。

我有一个Python脚本来生成这些内容,脚本如下:

从django.db导入交易

导入sys

导入CSV

导入StringIO

文件= sys.argv[1]

no_cols_flag=0

旗标=0

header_arr=[]

打印文件

f = 打开(文件,'r')

while(f.readline()!=“”):

对于i in [line.split(',') for line in open(file)]:#在分隔符上拆分

打印"==========================================================="

row_flag=0

row_d=""

对于j在i中:#对于拆分字符串中的每个令牌

row_flag=1

打印j

如果j:

no_cols_flag=no_cols_flag+1

数据=j.strip()

打印j

打破

如何修改上述脚本以表明此数据属于特定的列标题...

谢谢...

0
0 Comments

Python脚本读取csv文件的问题是什么以及解决方法是什么?

问题:你导入了csv模块,但是从未使用过。为什么?

解决方法:如果你这样做

import csv
reader = csv.reader(open(file, "rb"), dialect="excel") # Python 2.x
# Python 3: reader = csv.reader(open(file, newline=""), dialect="excel")

你会得到一个包含你所需内容的reader对象;第一行将包含标题,而后续行将包含相应位置的数据。

更好的方法可能是(如果我理解你的意思的话):

import csv
reader = csv.DictReader(open(file, "rb"), dialect="excel") # Python 2.x
# Python 3: reader = csv.DictReader(open(file, newline=""), dialect="excel")

这个DictReader可以被迭代,返回一系列使用列标题作为键和后续数据作为值的字典,所以

for row in reader:
    print(row)

将输出

{'Name': 'Nick', 'Designation': 'F4321', 'Type': 'Subject', 'Total': '29', 'First-term assessment': '10', 'Second-term assessment': '19', 'Description': 'D1234'}
{'Name': 'HTML', 'Designation': 'F4321', 'Type': 'Unit', 'Total': '', 'First-term assessment': '18', 'Second-term assessment': '', 'Description': 'D1234-1'}
{'Name': 'Tags', 'Designation': 'F4321', 'Type': 'Topic', 'Total': '', 'First-term assessment': '18', 'Second-term assessment': '', 'Description': 'First Term'}
{'Name': 'Review of representation of HTML', 'Designation': '', 'Type': 'Subtopic', 'Total': '', 'First-term assessment': '', 'Second-term assessment': '', 'Description': ''}

在Python 2.x中,始终以二进制模式打开文件(根据需要使用'rb'或'wb')。

Machin:为什么?csv模块文档中没有提到这一点,而且我从未遇到过未带有标志的打开文件的问题。有些示例使用它,有些则不使用。你可能是对的,但我想知道这背后的原因。

解释:2.x文档docs.python.org/library/csv.html#csv.reader中有这样的说明:"如果csvfile是一个文件对象,在那些有区别的平台上,它必须以'b'标志打开。",例如Windows平台。因此为了平台独立性,应该始终使用'rb'。尽管文档没有提到,但在写入时也是同样的情况。CSV记录以CRLF结束,与平台无关 -- 本质上是一种二进制格式。如果在Windows上不提供'wb',将得到CRCRLF。

Machin:可能是我看漏了(我只在页面中搜索了rb),谢谢。我会进行编辑。

0