python入门(四):标准输出和文件读写详解编程语言

Python输出

1.表达式语句

  • str(): 函数返回一个用户易读的表达形式,可以使用 str.format() 函数来格式化输出值。
  • repr(): 产生一个解释器易读的表达形式。

2.print() 函数。

以下两行在事实上等价:

sys.stdout.write('hello'+'/n') 
print 'hello'
#两种方式输出平方表 
#print方式 
for x in range(, 11): 
    print(repr(x).rjust(2), repr(x*x).rjust(3)) 
    # 注意前一行 'end' 的使用 
    print(repr(x*x*x).rjust(4)) 
#表达式 
for x in range(1, 11): 
    print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))  

读和写文件

open() 将会返回一个 file 对象,基本语法格式如下:

open(filename, mode)
  • filename:filename 变量是一个包含了你要访问的文件名称的字符串值。
  • mode:mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
#!/usr/bin/python3 
 
import os 
import os.path 
 
ls = [] 
 
def getAppointFile(path,ls): 
    fileList = os.listdir(path) 
    try: 
        for tmp in fileList: 
            pathTmp = os.path.join(path,tmp) 
            if True==os.path.isdir(pathTmp): 
                getAppointFile(pathTmp,ls) 
            elif pathTmp[pathTmp.rfind('.')+1:].upper()=='PY': 
                ls.append(pathTmp) 
    except PermissionError: 
        pass 
    finally: #由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现 
      if f: 
       f.close() 
def main(): 
 
    while True: 
        path = input('请输入路径:').strip() 
        if os.path.isdir(path) == True: 
            break 
 
    getAppointFile(path,ls) 
    print(ls) 
 
main()

ps:

每次都这么关闭文件在太繁琐,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f: 
    print(f.read())

pickle 模块

python中可以使用 Pickle 和 json, 以及自定义序列化反序列化函数进行处理需要序列化的数据。

序列化和反序列化的目的:  
1、以某种存储形式使自定义对象持久化;  
2、将对象从一个地方传递到另一个地方。  
3、使程序更具维护性

  • 序列化

  由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化。

  • 反序列化

  反序列化恰恰是序列化的反向操作,也就是说,把已存在在磁盘或者其他介质中的对象,反序列化(读取)到内存中,以便后续操作,而这个过程就叫做反序列化。

序列化基本接口:

  pickle.dump(obj, file, [,protocol])
  注解:将对象obj保存到文件file中去。
     protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
     file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以’w’方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。

 

#使用pickle模块将数据对象保存到文件 
 
import pickle 
 
data1 = {'a': [1, 2.0, 3, 4+6j], 
         'b': ('string', u'Unicode string'), 
         'c': None} 
 
selfref_list = [1, 2, 3] 
selfref_list.append(selfref_list) 
 
output = open('data.pkl', 'wb') 
 
# Pickle dictionary using protocol 0. 
pickle.dump(data1, output) 
 
# Pickle the list using the highest protocol available. 
pickle.dump(selfref_list, output, -1) 
 
output.close() 

 反序列化

#!/usr/bin/python3 
import pprint, pickle 
 
#使用pickle模块从文件中重构python对象 
pkl_file = open('data.pkl', 'rb') 
 
data1 = pickle.load(pkl_file) 
pprint.pprint(data1) 
 
data2 = pickle.load(pkl_file) 
pprint.pprint(data2) 
 
pkl_file.close() 

  

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/11592.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论