认识任何一个Python模块都需要知道,这个模块中定义的对象的类属性和方法,其实就是看调用这个模块能返回什么对象,这个对象又有什么属性和方法。
首先以下是用到的csv例子:
读方法一
csv.reader(csvfile, dialect='excel', **fmtparams)
返回一个 reader 对象,该对象将逐行遍历 csvfile(具体可以参考https://docs.python.org/zh-cn/3/library/csv.html)。关于这个对象,用下面的实例可以更好的理解:
import csv
filename =r"C:\Users\zhangxijiangyayaya\Desktop\issue list.csv"
with open(filename, "r", encoding="utf-8")as f:
reader =csv.reader(f)
print(type(reader))
print(reader)
print(reader[0])
编译结果如下:
<class '_csv.reader'>
<_csv.reader object at 0x0000015E92433E80>
Traceback (most recent call last):
File "C:\Users\zhangxijiangyayaya\PycharmProjects\pythonProject3\test.py", line 14, in <module>
print(reader[0])
TypeError: '_csv.reader' object is not subscriptable
我这边用print(reader[0])来尝试打印对象的内容,发现会报TypeError: '_csv.reader' object is not subscriptable,因为csv.reader方法返回的不是一个可索引的列表,而是一个reader对象,这个对象其实是一个迭代器
reader对象不能直接索引,但是可以通过for循环逐行索引
索引reader对象方法一:以下是遍历reader对象,传递的是列表
for rows in reader:
print(rows)
索引reader对象方法二:此方法可以把列表存到rows2变量中
rows2 = [row for row in reader]
print(rows2)
读方法二
csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
也是创建一个reader对象,该对象在操作上类似于常规 reader,但是将每行中的信息映射到一个 dict,如果没有参数定义,文件f的第一行中的值将用作字段名。这个方法是我最推荐的,以下是用这个方法的完整代码
import csv
filename =r"C:\Users\zhangxijiangyayaya\Desktop\issue list.csv"
with open(filename, "r", encoding="utf-8")as f:
reader =csv.reader(f)
print(type(reader))
print(reader)
readerdic = csv.DictReader(f)
print(readerdic)
dicrows =[row for row in readerdic]
#遍历某一列
for dicrow in dicrows:
print(dicrow["Issue key"])
# 取特定行的特定内容
line0= dicrows[0]
print(line0["Issue key"])
编译结果如下:
<class '_csv.reader'>
<_csv.reader object at 0x0000021A30473E80>
<csv.DictReader object at 0x0000021A308B3F40>
28383
29194
29952
30027
28383