python数据文件输入输出_python核心编程-文件和输入输出

本章将介绍python的文件处理和相关输入输出能力。

包括介绍文件对象(它的内建函数、内建方法和属性)、标准文件、同时讨论文件系统的访问方法、文件执行、最后简洁介绍持久存储和标准库中与文件有关的模块

内建函数open()和file() 提供了初始化输入/输出(I/O)操作的通用接口。

内建函数open()

基本语法:

file_object = open(file_name,access_mode='r',buffering=-1)

file_name是包含要打开的文件名字的字符串,它可以是相对路径或者绝对路径。可选变量access_mode也是一个字符串,代表打开文件的模式,默认是读取模式'r'

一些打开文件的例子:

fp = open('/etc/motd') #以读的方式打开

fp = open('test', 'w') #以写的方式打开

fp = open('data', 'r+') #以读写方式打开

fp = open(r'c: \io.sys', 'rb') #以二进制读模式打开

工厂函数file()

open()和file()函数具有相同的功能,可以任意替换。

文件的内建方法

In [1]: f = open('/tmp/test3','r+')

In [2]: f.

f.close f.fileno f.name f.readinto f.softspace f.writelines

f.closed f.flush f.newlines f.readline f.tell f.xreadlines

f.encoding f.isatty f.next f.readlines f.truncate

f.errors f.mode f.read f.seek f.write

#输入

#read()方法用来读取字节到字符串中,最多读取给定数目个字节。

#readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节)。然后整行,包括行结束,作为字符串返回。

#readlines()会读取所有(剩余的)行然后把它们作为一个字符串列表返回。它的可选参数sizehit代表返回的最大字节大小

#xreadlines()不是一次性读取所有行,而是每次读取一块,所以用在for循环时可以减小对内存的占用,不过,随着Python中的迭代器和文件迭代的引入,没有必要再使用xreadlines(),因为与使用iter(file)和在for循环中文件迭代 for eachLine in file效果是一样的。

#输出

#write()方法把含有文本数据或者二进制数据块的字符串写入到文件中。

#writelines()方法是针对列表的操作,它接受一个字符串列表作为参数,将它们写入文件。行结束符并不会被自动加入,必须在调用writelines()前给每行结尾加入上行结束符。

#文件内移动

#seek()方法可以在文件中移动文件指针到不同的位置。offset字节代表相对于某个位置的偏移量。位置的默认值为0,代表从文件的开头算起(即绝对偏移量),1代表从当前位置算起,2代表从文件末尾算起。

#文件迭代

#一行一行的访问文件很简单:

for eachLine in f

...

#在这个循环里,eachLine代表文本文件中的一行(包括末尾的行结束符)。

#其他

#close() 通过关闭文件来结束对它的访问。Python垃圾收集机制也会在文件对象的引用计数降至零的时候关闭文件。如果你不显式地关闭文件,那么你可能丢失输出缓冲区的数据。

#fileno()方法返回打开文件的描述符。

#flush()方法会直接把内部缓冲区中的数据立即写入文件,而不是被动地等待输出缓冲区被写入。

#isatty()方法是一个布尔内建函数,当文件是一个类tty设备时返回True,否则返回False

#truncate()方法是将文件截取到当前文件指针位置或者到给定size,以字节为单位

有助于开平台开发的os模块属性

os 模块属性

描述

linesep

用于在文件中分隔行的字符串

sep

用于分隔文件路径名的字符串

pathsep

用于分隔文件路径名的字符串

curdir

当前工作目录的字符串名称

pardir

(当前工作目录)父目录字符串名称

filename = raw_input('Enter file name: ')

fobj = open(filename,'w')

while True:

aLine = raw_input('Enter a line('.' to quit): ')

if aLine != '.':

fobj.write('%s%s' % (aLine,os.linesep))

else:

break

fobj.close()

标准文件

一般来说,只要你的程序一执行,你就可以访问3个标准文件。它们分别是标准输入(一般是键盘)、标准输出(到显示器的缓冲输出)和标准错误(到屏幕的非缓冲输出),命名分别是stdin stdout stderr。

Python中可以通过sys模块来访问这些文件的句柄。导入sys模块之后,就可以使用sys.stdin sys.stdout sys.stderr来访问。

print语句通常是输出到sys.stdout 而内建函数 raw_input()则通常从sys.stdin接收输入

命令行参数

sys模块通过 sys.argv 属性提供了对命令行参数的访问。

argv 变量代表一个从命令行上输入的各个参数组成的字符串数组;

argc 变量代表输入的参数个数

在Python中,argc就是sys.argv列表的长度,即len(sys.argv),而该列表的第一项sys.argv[0] 永远是程序的名称

总结如下:

** sys.argv 是命令行参数的列表**

** len(sys.argv) 是命令行参数的个数(也就是sys.argc)

测试程序:

import sys

print 'you entered', len(sys.argv), 'arguments...'

pring 'they are: ',str(sys.argv)

$argv.py 76 tales 85 hawk

you entered 5 arguments...

they are: ['argv.py','76','tales','85','hawk']

os和os.path模块的例子(ospathex.py)

#!/usr/bin/env python

import os

for tmpdir in ('/tmp',r'c: \temp'):

if os.path.isdir(tmpdir):

break

else:

print 'no temp directory available'

tmpdir = ''

if tmpdir:

os.chdir(tmpdir)

cwd = os.getcwd()

print '*** current temporary directory'

print cwd

print '*** creating example directory...'

os.mkdir('example')

os.chdir('example')

cwd = os.getcwd()

print '*** new working directory...'

print cwd

print '*** original directory listing:'

print os.listdir(cwd)

print '*** creating test file ...'

fobj = open('test','w')

fobj.write('foo\n')

aline = 'bar'

fobj.write('%s%s' %(aline,os.linesep))

fobj.close()

print '*** updated directory listing:'

print os.listdir(cwd)

print "*** renaming 'test' to 'filetest.txt'"

os.rename('test','filetest.txt')

print '*** updated directory listing:'

print os.listdir(cwd)

path = os.path.join(cwd,os.listdir(cwd)[0])

print '*** full file pathname:'

print path

print '*** (pathname,basename) =='

print os.path.split(path)

print '*** (filename,extension) =='

print os.path.splittext(os.path.basename(path))

print '*** displaying file contents:'

fobj = open(path)

for eachLine in fobj:

print eachLine

fobj.close()

print '*** deleting test file'

os.remove(path)

print '*** updated directory listing:'

print os.listdir(cwd)

os.chdir(os.pardir)

print '*** deleting test directory'

os.rmdir('example')

print '*** Done'

文件执行

永久存储模块

pickle模块

marshal模块

文件相关模块

模块

内容

base64

提供二进制字符串和文本字符串间的编码/解码操作

binascii

提供二进制和ASCII编码的二进制字符串间的编码/解码操作

bz2

访问BZ2格式的压缩文件

csv

访问csv文件(以逗号分隔文件)

filecmp

用于比较目录和文件

fileinput

提供多个文本文件的行迭代器

getopt/optparse

提供了命令行参数的解析/处理

gzip/zlib

读写GNU zip(gzip)文件(压缩需要zlib 模块)

shutil

提供高级文件访问功能

c/StringIO

对字符串对象提供类文件接口

tarfile

读写TAR归档文件,支持压缩文件

tempfile

创建临时文件(名)

uu

uu 格式的编码/解码

zipfile

用于读取ZIP归档文件的工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值