CSV文件
  csv是一个被行分隔符、列分隔符化分成行和列的文本文件;
  csv不指定字符编码;
  行分隔符为\r\n,最后一行可以没有换行符;
  列分隔符常为逗号或者制表符;
  每一行称为一条记录record
  字段可以使用双引号括起来,也可以不使用;如果字段中出现了双引号、逗号、换行符必须使用双引号括起来。如果字段的值是双引号,使用两个双引号表示一个转义,表头可选,和字段列对齐即可;

from pathlib import Path
csv_body = """\
id,name,age,comment
1,zhang,18,"I`m 18"
2,wang,20,"Hello BeiJing"
3,li,23,"你好,计算机"
"""
p = Path('C:/Users/Sunjingxue/Downloads/test.csv')
p.parent.mkdir(parents=True,exist_ok=True)
p.write_text(csv_body)

  reader()  读取csv文件内容

import csv
csvname = "C:/Users/Sunjingxue/Downloads/test.csv"
with open(csvname) as f:
red = csv.reader(f)
print(red) #返回一个csv对象
for row in red:
#print(row) 返回一个列表
print(', '.join(row)) #返回结果
<_csv.reader object at 0x0000000001E2BC40>
id, name, age, comment
1, zhang, 18, I`m 18
2, wang, 20, Hello BeiJing
3, li, 23, 你好,计算机
#在python3.5.2环境下
In [1]: from pathlib import Path In [2]: import csv In [3]: p = Path('/root/test.csv') In [4]: with open(p) as f: #此时如果不将p转换成字符串类型,运行时会报错;
...: red = csv.reader(f)
...: for i in red:
...: print(i)
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-5e013681f47a> in <module>
----> 1 with open(p) as f:
2 red = csv.reader(f)
3 for i in red:
4 print(i)
5 TypeError: invalid file: PosixPath('/root/test.csv') In [5]: with open(str(p)) as f:
...: red = csv.reader(f)
...: for i in red:
...: print(i)
...:
['1', 'zhang', '18']
['2', 'wang', '19']
['3', 'li', '20']
#在python3.8.6环境下
from pathlib import Path
import csv
p = Path("C:/Users/Sunjingxue/Downloads/test.csv")
print(type(p))
with open(p) as f: #在3.8.6环境下则不需要将p转换成字符串类型;
re = csv.reader(f)
for i in re:
print(', '.join(i)) #并且re还是个生成器;可以用next()读取;print(next(re))

writer(csvfile,dialect='execl',**fmtparams) 返回DictWriter的实例
  主要的方法有:
    writerow() 读取1行
    writerows() 读取多行

from pathlib import Path
import csv rows = [[4,'tom',22,'banana'],
(5,'jerry',24,'apple'),
(6,'lilei',25,'just\t"in'),
'abcdefg',
(('one','two'),('three','four'))
] row = ['序号','姓名','年龄','别名'] p = Path('C:/Users/Sunjingxue/Downloads/test.csv')
with open(p,'w',newline='') as f:
wr = csv.writer(f)
wr.writerow(row)
wr.writerows(rows)

  从上面的例子可以看出,写入csv文件列表中的元素可以是列表,元组,字符串;在open()的时候,newline=‘ ’,如果不对换行符做处理,则每写一行就会加一行空白行(windows默认是\r\n),非常的影响观感;

ini文件处理
  中括号里面的部分程为section,译作节、区、段;
  每个section内,都是key=value形成的键值对,key称为option选项;
  注意:这里的DEFAULT是缺省section的名字,必须大写;

#示例ini文件
[DEFAULT]
def = test [mysql]
my = True [mysqld]
datadir = /dbserver/data
port = 3306
character-set-server = urf8
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

configparser模块
  可以将section当做key,section存储这键值对组成的字典,可以把ini配置文件当做一个嵌套的字典,默认使用的是有序字典;
  read(filenames,encoding=None) 读取ini文件,可以是单个文件,也可以是文件列表,可以指定文件编码;
  sections() 返回section列表,缺省section不包括在内;
  options(section) 返回section的所有option,会追加缺省的section的option;
  has_option(section,options) 判断section是否存在这个option;
  get(section,option,*,raw=False,vars=None[,fallback]) 从指定的段的选项上取值,如果找到返回,如果没有找到就去找DEFAULT端有没有;
  getint(section,option,*,raw=False,vars=None[,fallback])
  getfloat(section,option,*,raw=False,vars=None[,fallback])
  getboolean(section,option,*,raw=False,vars=None[,fallback])
  上面3个方法和get一样,返回指定类型数据;

from configparser import ConfigParser

filename = 'C:/Users/Sunjingxue/Downloads/test.ini'
cfg = ConfigParser()
cfg.read(filename)
#打印所有section,不包括默认section;
print(cfg.sections())
#打印section的所有options,并且会追加默认section的option;
print(cfg.options('mysqld'))
#判断指定section中的指定option是否存在
print(cfg.has_option('mysqld','port'))
#判断section是否存在;
print(cfg.has_section('client'))
#从指定的section中取指定的option的值,如果不存在则去DEFAULT找,如果DEFAULT中没有则报错
print(cfg.get('mysqld','port'))
print(cfg.get('mysqld','def'))
#返回int类型的数值
print(cfg.getint('mysqld','port'))
#返回float类型的数值
print(cfg.getfloat('mysqld','port'))
#返回布尔值类型的数值
print(cfg.getboolean('mysql','my'))
#如果指定了section,则返回该section名和option,组成二元组;如果不指定seciton,则返回所有section的类;
#######################
返回结果:
['mysql', 'mysqld', 'China']
['datadir', 'port', 'character-set-server', 'sql_mode', 'def']
True
False
3306
test
3306
3306.0
True

  items(raw=False,vars=None)
  items(section,raw=False,vars=None)
  没有section,则返回所有section名字及其对象,如果指定section,则返回这个指定的section的键值对组成二元组;

#如果指定了section,则返回该section名和option,组成二元组;如果不指定seciton,则返回所有section的类;
print(cfg.items('mysql'))
print(cfg.items())
for k,v in cfg.items():
print(k,type(v))
print(k,cfg.items(k)) #执行结果
[('def', 'test'), ('my', 'True')]
ItemsView(<configparser.ConfigParser object at 0x0000000001DF8FD0>)
DEFAULT <class 'configparser.SectionProxy'>
DEFAULT [('def', 'test')]
mysql <class 'configparser.SectionProxy'>
mysql [('def', 'test'), ('my', 'True')]
mysqld <class 'configparser.SectionProxy'>
mysqld [('def', 'test'), ('datadir', '/dbserver/data'), ('port', '3306'), ('character-set-server', 'urf8'), ('sql_mode', 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES')]
China <class 'configparser.SectionProxy'>
China [('def', 'test'), ('gansu', 'lanzhou'), ('shanxi', 'changan')]

  add_section(section_name) 增加一个section;
  set(section,option,value)
  section存在的情况下,写入option=value,要求option、value必须是字符串;
  remove_section(section) 移除section及其所有option;
  remove_section(section,option) 移除section下的option;
  write(fileobject,spece_around_delimiters=True) 将当前config的所有内容写入fileobject中,一般open函数使用w模式;

if cfg.has_section('China') == True:
pass
else:
cfg.add_section('China')
with open(filename,'w') as f:
cfg.set('China', 'gansu', 'lanzhou')
cfg.set('China', 'shanxi', 'changan')
cfg.write(f)
#通过字典操作修改ini文件中的值;
#cfg['section']['option'] = 'value'
#cfg['section'] = {'option' = 'value'}
cfg['mysqld']['port'] = '3308'
cfg['mysql'] = {'my':'False'}
#修改完成之后写入文件
with open(filename,'w') as f:
cfg.write(f)

执行结果:

第十七天python3 文件IO(三)的更多相关文章

  1. 第十五天python3 文件IO(一)

    一.文件打开 open(path,flag[,encoding][,errors]) 参数说明: path:要打开文件的路径 flag:打开方式( r:以只读的方式打开文件,文件的描述符放在文件开头 ...

  2. 第十六天python3 文件IO(二)

    BytesIO操作 io模块中的类 from io import BytesIO 内存中,开辟的一个二进制模式的buffer,可以像文件对象一样操作它: 当close方法被调用的时候,这个buffer ...

  3. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. 三、文件IO——系统调用

    3.1 文件描述符 文件IO 系统调用是不带缓存的,文件 I/O 系统调用不是 ANSI C 的组成部分,是 POSIX 的组成部分. 系统调用与C库: C库函数的IO 的底层还是调用系统调用 I/O ...

  5. 文件IO——将文件dfs的文件内容第三个字节之后的内容复制到文件dfd中

    /* 使用文件IO将文件fds中的内容复制到文件fdd中去 1.创建两个文件描述符 2.使用open()方法分别以只读只写方式将文件描述符符文件连接 3.将读位置后移三位 4.将fds内容存储到缓冲区 ...

  6. 文件IO函数和标准IO库的区别

    摘自 http://blog.chinaunix.net/uid-26565142-id-3051729.html 1,文件IO函数,在Unix中,有如下5个:open,read,write,lsee ...

  7. Java 文件IO续

    文件IO续 File类    用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作    File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...

  8. 文件IO操作

    前言 本文介绍使用java进行简单的文件IO操作. 操作步骤 - 读文件 1. 定义一个Scanner对象 2. 调用该对象的input函数族进行文件读取 (参见下面代码) 3. 关闭输入流 说明:其 ...

  9. 文件IO

    在unix世界中视一切为文件,无论最基本的文本文件还是网络设备或是u盘,在内核看来它们的本质都是一样的.大多数文件IO操作只需要用到5个函数:open . read . write . lseek 以 ...

随机推荐

  1. muduo源码分析之TcpServer模块

    这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1] 然后我们来看下muduo的整体架构[来源1] 首先muduo有 ...

  2. Python-100-Days-master-第二周笔记

    python100day学习第二周 # 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值 list1 = [1, 3, 5, 7, 100] for index, elem in ...

  3. RabbitMQ 3.9( 续 )

    前言 基础篇链接:https://www.cnblogs.com/xiegongzi/p/16229678.html 3.9.延迟队列 - 重要 3.9.1.延迟队列概念 这个玩意儿要表达的意思其实已 ...

  4. CMake技术总结

    在做算法部署的过程中,我们一般都是用C++开发,主要原因是C++的高效性,而构建维护一个大型C++工程的过程中,如何管理不同子模块之间的依赖.外部依赖库.头文件和源文件如何隔离.编译的时候又该如何相互 ...

  5. tomcat 1.2 负载均衡

    实验效果:访问同一个ip或域名,轮询显示两个不同的tomcat界面, nginx服务器ip:192.168.213.4       tomcat服务器ip:192.168.213.3 实验环境:两台服 ...

  6. Spring Boot 配置 HikariCP

    HikariCP 是一个可靠的.高性能的 JDBC 连接池 本来用的 alibaba/druid,但实际并没有怎么用其内置的监控网页,然后多方调查,决定弃用 druid,替换为 HikariCP Sp ...

  7. vs.net调试ArcGIS Engine代码查看变量时,提示“要检查本机对象,请启用本机代码调试。” 的解决方法

    用vs2017 调试 查看ArcGIS Engine 的变量时 会提示如下图所示的错误: 解决方法: 工具->选项->调试->常规->使用托管的兼容模式 如下图所示: 2.设置 ...

  8. FreeMarker速查手册

    一.开始 原理图 引入FreeMarker依赖 <dependency> <groupId>org.freemarker</groupId> <artifac ...

  9. IIS7 网站发布常见报错问题解决方案汇总

    本文实例为大家分享了IIS7 网站发布常见问题,以及五种问题的解决方法,供大家参考,具体内容如下: 1.不是有效的Win32位应用程序 : 解决方案: 1).进入应用程序池=>选中网站=> ...

  10. SPFA 最短路算法

    SPFA算法 1.什么是spfa算法? SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA一般情况复杂度是O(m)O(m) ...