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 ...
随机推荐
- php查询mysql时,报超出内存错误(select count(distinct))时
学时服务器查询教练所带人数时,使用select count(distinct(u_STRNO))时报超出内存错误.后参考“mysqld-nt: Out of memory解决方法”http://jin ...
- Oracle查询脚本优化
发现生产环境的Oracle数据库cpu使用率上升超过70%,其中一条查询语句达到每秒调用40多次.现在我们来观摩下该语句: select t.id,t.level,t.policy, t.type,t ...
- npm笔记和bower
生成package.json文件的方式就是dos下进入该文件夹,然后执行 npm init Bower简单点儿说就是通过nodejs直接下载GitHub上的js源码 首先你得有node,这里就不多做介 ...
- 解决jenkins拉取报告没有样式的问题(还没试过)
来源: https://testerhome.com/topics/9476 对于测试报告来说,除了内容的简洁精炼,样式的美观也很重要.常用的做法是,采用HTML格式的文档,并搭配CSS和JS,实现自 ...
- Java-Runoob:Java 基础语法
ylbtech-Java-Runoob:Java 基础语法 1.返回顶部 1. Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍 ...
- windows服务器审核失败消息:事件ID: 861 进程标识符:904
事件ID: 861 进程标识符:904 排查方法: win+R键调出运行窗口, 输入cmd 输入tasklist /SVC /FI “PID eq 904” 查找进程号904对应的是不是dhcp ...
- Rest之路 - Rest架构中的重要概念(二)
状态无关性 Rest 架构中不维持client,resource and request 的状态,我们通常称 Rest 服务是状态无关的.基于此的优势是为设计Rest架构提供了简便:每一个请求可以被完 ...
- C++获取Lua全局变量和执行Lua多参数多返回值函数
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- List批量赋值的几种方法
List<int> list = new List<int>();list.AddRange(new int[] { 1, 5, 10, 20 ,33 }); //也可直接赋值 ...
- linux安装xgboost
在学校服务器上安装xgboost,事先我已经安装了anaconda,但是因为师兄已经装了python所以没加入到path. 网上的方法一般都要编译,另外官方的下载方法要联网..总之出了一堆错,最终还是 ...