IO

来源:互联网 发布:上海1943和老街知乎 编辑:程序博客网 时间:2024/06/11 22:28

IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据。

在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。

break 跳出循环

continue 跳出本次循环

StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。

BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes:

>>> from io import BytesIO>>> f = BytesIO()>>> f.write('中文'.encode('utf-8'))6>>> print(f.getvalue())b'\xe4\xb8\xad\xe6\x96\x87'

请注意,写入的不是str,而是经过UTF-8编码的bytes。
和StringIO类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:

>>> from io import BytesIO>>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')>>> f.read()b'\xe4\xb8\xad\xe6\x96\x87'

1、利用os模块编写一个能实现dir -l输出的程序。

#引入datetime包datetime类from datetime import datetime#引入os包import os#pwd是当前路径pwd = os.path.abspath('.')print('      Size     Last Modified  Name')print('------------------------------------------------------------')#os.listdir(pwd)是包含的文件或文件夹的名字的列表。for f in os.listdir(pwd):    #获取f的size    fsize = os.path.getsize(f)    #os.path.getmtime(f)获取f的创建时间戳。    #datetime.fromtimestamp(os.path.getmtime(f))根据时间戮创     建一个datetime对象。    #datetime.fromtimestamp(os.path.getmtime(f)).strftime     ('%Y-%m-%d %H:%M')将datetime对象以strftime的格式展现。    mtime = datetime.fromtimestamp(os.path.getmtime(f))    .strftime('%Y-%m-%d %H:%M')    #if os.path.isdir(f)如果f是文件夹的话,flag就是/否则是‘’    flag = '/' if os.path.isdir(f) else ''    #%10d以10位的格式展示整数。如果不足10位,前面补0print('%10d  %s  %s%s' % (fsize, mtime, f, flag))

2、编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。

import ospwd = os.path.abspath('.')s=input('which file do you want?')#查找路径下的含指定字符串的文件def lookfile(pwd):    for f in os.listdir(pwd):        if s in f:            print(f)    for f in os.listdir(pwd):        if os.path.isdir(f):            pwd=os.path.abspath(f)            lookfile(pwd)lookfile(pwd)

s,f都是字符串。 if s in f是说如果s被包含在f内。
这个代码是有问题的。只能找到这一层和下一层含指定字符串的文件,不能深入到第三层及以后。今天看了半天,没看出问题来。记在这里,等有缘时看。