txt+csv

##---txt---##
def open(file, mode='r', ...):
    'r' read only
    'w' override
    'a' appending
    
open 之后:
with open(file, 'r') as f:
    # 不全部放在内存里,即用即读
    for line in f:
        do_sth(line)
    # 读取文件的全部内容
    f.read()
    # 读取一行
    f.readline()
    line = f.readline()
    while line:
        do_sth(line)
        lien = f.readline()
    # 读取每一行,并且存为一个list
    f.readlines()
# 还是第一种方法比较优雅
##---csv---##
comma separate values
# 简单理解,就是比excel的xls更加通用,但也会丢掉图形、公式、对象等信息。
# read
with open('test.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)
    # print(csv_reader)
    next(csv_reader)
    for line in csv_reader:
        print(csv_reader.line_num, line)
    # 也可以直接这么写
    for line in csv_file:
        print(line)
# csv是text mode,不需要以‘b’修饰
# 需要open之后reader
# next(csv_reader)可以读取下一行,就像f.readline()
# csv_reader.line_num可以读取当前行的行号,从1开始
with open('test.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)
    # print(csv_reader)
    while True:
        try:
            # txt文件也可以用这种方式
            line = next(csv_reader)
            print(line)
        except:
            break
            
# write
with open('test.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for i in range(5):
        writer.writerow("abcdefg")

with open('test.csv', 'r') as f:
    for line in f:
        print(line.strip())
# 如果不指定newline='',则每写入一行将有一空行被写入
# writer.writerow(list)接受list对象,字符串当作list处理
# writer.writerows(["abcdefg",'hijklmn','opq','rst'])可以写入多行
a,b,c,d,e,f,g
h,i,j,k,l,m,n
o,p,q
r,s,t

# DictReader和DictWriter对象
使用DictReader可以像操作字典那样获取数据,把表的第一行(一般是标头)作为key。可访问每一行中那个某个key对应的数据。
with open('test.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(["abcdefg",'hijklmn','opq','rst'])

with open('test.csv', 'r') as f:
    reader = csv.DictReader(f)
    for line in reader:
        print(line['g'])

headers = ['name', 'age']
datas = [{'name':'zhangxiaolong', 'age':18}, {'name':'liusu'}]
with open('test2.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, headers)
    writer.writeheader()
    for line in datas:
        writer.writerow(line)

with open('test2.csv', 'r') as f:
    for line in f:
        print(line.strip())

猜你喜欢

转载自blog.csdn.net/shanlovelong/article/details/86489650