csv、txt读写及模式介绍
1读写模式
r以读方式打开文件,可读取文件信息
w已写方式打开文件,可向文件写入信息。如文件存在,则清空,再写入
a以追加模式打开文件,打开文件可指针移至末尾,文件不存在则创建
r+以读写方式打开文件,可对文件进行读和写操作
w+消除文件内容,以读写方式打开文件
a+以读写方式打开文件,文件指针移至末尾
b以二进制打开文件
2csv
2.1基本用法
#coding=utf-8
import csv
import codecs
import sys
# reload(sys)
# sys.setdefaultencoding('utf-8')
#创建写入
csvfile=open('csv_test.csv','wb')
# csvfile.write(codecs.BOM_UTF8)#防止文件中显示中文乱码(并非乱码),若注意生成文件编码,用notepad++转码也能正常显示。
writer=csv.writer(csvfile)
writer.writerow(['姓名','年龄','电话'])
data=[('alex','23','139'),('tom','43','189')]
writer.writerows(data)
csvfile.close() #读取
csvfile=open('csv_test.csv','rb')
reader=csv.reader(csvfile)
for line in reader:
print line
csvfile.close()
2.2DictWriter
我主要想说的是DictWriter,我为什么会喜欢使用DictWriter呢,因为普通的writer你需要手工去构建列表,尤其是通过表单提交的时候,而我之前因为一直在zope平台上开发,而zope支持一种高级表单数据模型,也就是可以通过定义表单的时候加入相应的标志来使提交后的表单数据自动的生成一个记录(records)类型,也就是生成一个每项数据都是一个字典的列表。这样,我就可以非常方便的直接把表单数据传给 DictWriter而生成csv,当然这个是在你能保证数据的正确性的前提下。好下面我来简单的说明一下这种zope的高级表单数据类型。
例子:
<form action='test_form_action' method=post>
<input type="text" name="rows.Column1:records" value="0" />
<input type="text" name="rows.Column2:records" value="1" />
<input type="text" name="rows.Column3:records" value="2" />
<input type="text" name="rows.Column4:records" value="3" />
<br />
<input type="text" name="rows.Column1:records" value="0" />
<input type="text" name="rows.Column2:records" value="1" />
<input type="text" name="rows.Column3:records" value="2" />
<input type="text" name="rows.Column4:records" value="3" />
<br />
<input type="text" name="rows.Column1:records" value="0" />
<input type="text" name="rows.Column2:records" value="1" />
<input type="text" name="rows.Column3:records" value="2" />
<input type="text" name="rows.Column4:records" value="3" />
<br />
<input type="text" name="rows.Column1:records" value="0" />
<input type="text" name="rows.Column2:records" value="1" />
<input type="text" name="rows.Column3:records" value="2" />
<input type="text" name="rows.Column4:records" value="3" />
<br />
<input type="text" name="rows.Column1:records" value="0" />
<input type="text" name="rows.Column2:records" value="1" />
<input type="text" name="rows.Column3:records" value="2" />
<input type="text" name="rows.Column4:records" value="3" />
<br />
<input type="submit" value="Submit CSV" />
</form>
表单提交后的结果是:
rows = [{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'},
{'Column1': '0', 'Column2': '1', 'Column3': '2', 'Column4': '3'}]
这样就可以直接调用DictWriter.writerows方法来处理了:
import csv
fieldnames = ['Column1', 'Column2', 'Column3', 'Column4']
dict_writer = csv.DictWriter(file('your.csv', 'wb'), fieldnames=fieldnames)
dict_writer. writeheader(fieldnames) # CSV第一行需要自己加入
dict_writer.writerows(rows) # rows就是表单提交的数据
*注意:这里的csv文件写入需要External Method的支持,因为在zope中由于权限沙箱的问题是不能直接操作csv模块来读写文件系统的。
3txt读写
#coding=utf-8
#文件创建和写入
f=open('test.txt','w')
f.write('hello world')#数据只写到缓存,未保存到文件
f.close()#保存到文件 f1=open('test.txt','r+')#r+模式不会清空文件,而是替换内容
f1.write('hello boy')
f1.close() f2=open('test.txt','a')#a模式实现追加
f2.write('\nhello girl')
f2.writelines(['\n你好','\n再见'])#多行写入
f2.flush()#将修改写入文件,无须关闭
demo:
#文件读取(按指针)
f3=open('test.txt')
print f3.read(1)
f3.seek(1,1)
'''f.seek(偏移量,选项)
(1)选项=0,表示将文件指针指向从文件头部到“偏移量”字节处
(2)选项=1,表示将文件指针指向从文件的当前位置,向后移动“偏移量”字节
(3)选项=2,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节
'''
print f3.read(1)
print f3.tell()#获取指针位置
f3.close() #文件读取(按行)
'''
f3.read()#读取所有
f3.readline()#逐行读取
f3.next()#类readline,未读到报错
f3.readlines()#列表形式存放
for i in open('test.txt'):
print i
''' #文件操作(查找) #方法一:全内容查找
f4=open('test.txt')
source=f4.read()
f4.close()
s=len(re.findall('hello',source))
print s #方法二:按行查找
f5=open('test.txt')
count=0
for i in f5.readlines():
li=re.findall('hello',i)
if len(li)>0:
count=count+len(li)
print 'search',count,'hello'
f5.close() #文件操作(替换)实例:把test.txt 中的hello全部换为"hi",并把结果保存到myhello.txt中。
f6=open('test.txt')
f7=open('myhello.txt','a')
for i in f6.readlines():
f7.write(i.replace('hello','hi'))
f6.close()
f7.close() #实例:读取文件test.txt内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为result.txt。
f = open('cdays-4-test.txt')
result = list()
for line in f.readlines(): # 逐行读取数据
line = line.strip() #去掉每行头尾空白
if not len(line) or line.startswith('#'): # 判断是否是空行或注释行
continue #是的话,跳过不处理
result.append(line) #保存
result.sort() #排序结果
print result
open('result.txt','w').write('%s' % '\n'.join(result)) #保存入结果文件
csv、txt读写及模式介绍的更多相关文章
- 如何处理大体积 XLSX/CSV/TXT 文件?
在开发过程中,可能会遇到这样的需求,我们需要从本地的 Excel 或 CSV 等文件中解析出信息,这些信息可能是考勤打卡记录,可能是日历信息,也可能是近期账单流水.但是它们共同的特点是数据多且繁杂,人 ...
- CQRS读写职责分离模式(Command and Query Responsibility Segregation (CQRS) Pattern)
此文翻译自msdn,侵删. 原文地址:https://msdn.microsoft.com/en-us/library/dn568103.aspx 通过使用不同的接口来分离读和写操作,这种模式最大化了 ...
- 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍
1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于 ...
- akka-typed(8) - CQRS读写分离模式
前面介绍了事件源(EventSource)和集群(cluster),现在到了讨论CQRS的时候了.CQRS即读写分离模式,由独立的写方程序和读方程序组成,具体原理在以前的博客里介绍过了.akka-ty ...
- C#中的CSV文件读写
目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...
- [Python]-pandas模块-CSV文件读写
Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...
- CDN模式介绍
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } CDN(content delivery networ ...
- 企业IT管理员IE11升级指南【4】—— IE企业模式介绍
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- Spark on YARN两种运行模式介绍
本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发) 问题导读 1.Spark ...
随机推荐
- 51nod 1495 中国好区间
阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是>=k的,且该区间的第k大的那个数,一定大于等于T.那么问题来了,阿尔法想知道有多少好的区间. 由于阿尔法的序 ...
- JAVA反射调用方法
1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...
- JMeter启动时显示Could not open/create prefs root node Software\JavaSoft\Prefs at root 0X80000002
在windows 7上启动jmeter时,提示错误: Java.util.prefs.WindowsPreferences <init> WARNING: Could not open/c ...
- ubuntu下安装ros出现“无法下载-package.ros.org中某个包-校验和不符”的解决方法
新安装的Ubuntu14.04,为了科研马上准备装ros indigo,却困难重重,一步一个坎. 比如说按照ros wiki里面一步一步来,当运行sudoapt-get update 然后出现下列情况 ...
- HTTP重要概念
connection连接 一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间. 在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含 ...
- Regex正则表达式
正则表达式 热身 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 例如 g ...
- Thinkphp或查询使用
if ($_GET['machine_type_id']) { $machine_type_id = trim($_GET['machine_type_id']); $where['machine_t ...
- mysql核心参数优化
MySQL数据库服务器配置CPU的优化内存的优化IO的优化连接的优化数据一致性的优化 1.描述back_log参数的作用? back_log = 500 要求 MySQL 能有的连接数量.当主要MyS ...
- VS2017自定义代码片段, 实现快捷输入
点击VS2017的工具→代码片段管理器, 下图: 语言选择C#, 路径定位到 Visual C#, 然后复制这个路径在电脑中打开 这里以增加 crk 快捷方式输出 Console.ReadKey()来 ...
- 第八章 JVM内存管理
8.1 物理内存与虚拟内存 地址总线(连接处理器和RAM或处理器和寄存器的)的宽度影响了物理地址的索引范围,决定了处理器一次可以从寄存器或内存中获取多少个bit.同时决定了处理器最大的寻址空间,32位 ...