Python学习week7-csv与ini文件处理

1、CSV文件

1.1、csv文件简介

# 什么是csv文件?csv是一个被行分隔符,列分隔符分成行和列的文本文件;

# csv不指定字符编码;

# 行分隔符为 ,最后一行可以没有换行符;

# 列分隔符通常为逗号,或者制表符;

# 每一行为一条记录record;字段可以使用双引号括起来,也可以不使用;如果字段中出现了双引号、逗号、换行符必须使用双引号括起来,如果字段的值是双引号,则要使用两个双引号表示一个转义;

1.2、手动生成csv文件

# 手动写入csv文件,注意按照cvs文件格式标准写入即可;

p= Path('f:/tmp/mycsv/test.csv')
parent=p.parent
if not parent.exists():
    parent.mkdir(parents=True)

csv_body='''
id,name,age,comment
1,zs,18,'zhangsan'
2,ls,20,"this is a ""test"" string"
3,www,23,"你好
计算机
"
'''
p.write_text(csv_body)

# 注意引号问题;

1.3、csv模块

# 导入csv模块 import csv

# reader(csvfile,dialect='excel',**fmtparams)

# 返回reader对象,是一个行迭代器;

# 默认使用excel方言,如下:

  • delimiter 列分隔符,逗号;
  • lineterminator 行分隔符,
  • quotechar 字段的引用符号,缺省为“双引号;

# 主要方法有:writerow、writerows

import csv
p = Path('f:/tmp/mycsv/test.csv')
rows = [
    [4,'tom',22,'toms'],
    [5,'jerry',23,'jerry'],
    (6,'justin',22,'just	"in'),
    "abcdefghi",
    ((1,),(2,))
]

row = rows[0]

with open(str(p),'w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(row)
    writer.writerows(rows)


with open(str(p)) as f:
    reader = csv.reader(f)
    print(next(reader))
    print(next(reader))

    for line in reader:
        print(line)

# 说明写入的row行,需要一个可迭代对象就可以,可迭代的每一个元素,将作为CSV行的每一个元素;

# 特别要注意下:windows下会在每行多出一个 ,造成如下情况:

解决办法open('test.csv','w',newline=''),解决后为:

2、ini文件处理

2.1、configparser模块

# 导入模块 from configparser import ConfigParser

# 将字典写入一个ini文件:

from configparser import ConfigParser
import json
cfg=ConfigParser()

d={
    'default':{'a':'test'},
    'mysql':{
        'default-character-set':'utf-8',
        'a':1000
    },
    'mysqld':{
        'datadir':'/dbserver/data',
        'port':3306,
        'character-set-server':'utf-8',
        'sql_mode':'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'
    }
}

cfg.read_dict(d)

cfg.write(open('test.ini','w'))

# 将一个ini文件读取并存为字典

cfg2=ConfigParser()

cfg2.read('test.ini',encoding='utf-8')
dest={}
for sect in cfg2.sections():
    print(sect,cfg2.items(sect))
    dest[sect]=dict(cfg2.items(sect))

print(dest)
原文地址:https://www.cnblogs.com/soulgou123/p/9827456.html