python3文件与输入输出

输入输出

  • 输出
    输出方式有两种,一种是print()配合str.format()进行格式化输出;一种是使用write输出到文件。
#使用print进行标准输出
str1 = "wzh"
str2 = "LiLei"
print("I am {}".format(str1))#{}代表占位符,其中可以有字符串代表对输出内容进一步处理
print("I am {x}, and he is{y}".format(x=str1, y=str2))#使用关键字参数,此方法比较推荐

#打印输出时候使用字典组织输出内容
#使用[],以此为key寻找内容,d代表十进制整数,并且0代表关联format中的第一个对象。注:由此处的0
#   可以看到,此格式的原理是前面{}去format中寻找需要打印的内容,所以编号是指format中的内容
table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))


#输出到文件。具体文件操作在后面模块介绍
# 打开一个文件
f = open("/tmp/foo.txt", "w")
f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )
# 关闭打开的文件
f.close()
  • 输入
    此部分主要介绍sys.stdin.readline()和input()。
    第一种情况:使用sys.stdin.readline()读入一行
# -*- coding: utf-8 -*-
import sys
str1 = sys.stdin.readline()
print('sys.stdin().readline() 输入:',str1)

使用命令行执行,输入一行字符串,可以包含空格和tab,回车结束输入。注:此方法读入内容的时候,将换行符也读进去了,所以输出时候带有换行。
第二种情况:使用input读入一行。

# -*- coding: utf-8 -*-
str1 = input("请输入内容:")
print('input() 输入:',str1)

使用命令行执行,输入一行字符串,可以包含空格和tab,回车结束输入。注:此方法以换行结束,但是并没有读入换行符。
第三种情况:使用sys.stdin.readline()读入不定数量行数的内容,并且每一行都重新输出。

# -*- coding: utf-8 -*-
import sys
try:
    while True:
        sn = sys.stdin.readline().strip()
        if sn == '':
            break
        sn = list(sn.split())
        print('此行输入为:',sn)
except:
    print("Except")

以行为单位进行数据处理,空行为结束标志。
第四种情况:使用input循环读入数据,每一行都进行处理。

# -*- coding: utf-8 -*-
import sys
try:
    while True:
        sn = input().strip()#输入内容去掉前后空格
        if sn == '':  #空行结束循环
            break
        sn = list(sn.split())
        print('此行输入为:',sn)
except:
    print("Except")

File

  • 常用操作
    首先,打开文件,open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None),常用参数file(文件路径)和mode,mode指打开模式,打开模式可以是阅读模式(‘r’ ) ,写入模式(‘w’ ) 和追加模式(‘a’ ) 。我们还可以选择是通过文本模式(‘t’ ) 还是二进制模式(‘b’ ) 来读取、写入或追加文本。
函数名称功能
file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])读取整行,包括 “\n” 字符。
  • pickle
    python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。此模块在人工智能方面用于保存模型,很好用!例如:
import pickle

fileName = "testpickle"#保存数据的文件名称
data = {"first":"tom", "second":"Jim"}
f = open(fileName,"wb")#二进制写的方式打开
pickle.dump(data, f)#数据写入文件
f.close()
del data

f = open(fileName, "rb")#重新打开文件
data2 = pickle.load(f)#加载文件中的内容到对象
print(data2)
f.close()
  • Unicode
    此处先讲一下编码、ASCII、Unicode、UTF-8的概念。由于计算机不认识字符,只识别01两个家伙。但是01又只能组成数字,所以,干脆用一串01表示字符吧,这也就是编码。至于怎么个表示法,美国人就说了,所有字符用8位表示,也就是一个字节的长度,8位的01可以表示255个字符,字母、数字和常见的字符足够表示了,这也就是ASCII编码。但是,世界上语言多,字符多,一个字节搞不定了,所以又发明了Unicode,使用两个字节表示,它能表示65535个字符,它确实足够用了。那么,ASCII能不能转化为Unicode呢?可以,前面补上8个0。这样看上去解决了问题,但是大家又发现了一个问题,如果一篇文章只有英文,那么使用Unicode岂不是很浪费空间呢!这时候UTF-8出现了,它将常用的一些字符用1个字符表示,生僻的最多用6个字符表示,这样就有效地节省了空间。所以在涉及到文件存储和网络数据传输的时候,都使用UTF-8表示字符。
# encoding=utf-8
import io
f = io.open("abc.txt", "wt", encoding="utf-8")
f.write(u"Imagine non-English language here")
f.close()
text = io.open("abc.txt", encoding="utf-8").read()
print(text)

OS

os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:

  • os.access(path, mode)
#!/usr/bin/python3

import os, sys

# 假定 /tmp/foo.txt 文件存在,并有读写权限
ret = os.access("testpickle", os.F_OK)#F_OK:是否存在;R_OK:是否可读;W_OK:是否可写;X_OK:是否可执行。  
print ("F_OK - 返回值 %s"% ret)
  • os.chdir(path)、os.getcwd()
#!/usr/bin/python3

import os, sys

path = "/tmp"

# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)

具体os模块函数列表,可以参考相关书籍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值