一、打印到屏幕
Python两种输出值的方式: 表达式语句和 print() 函数
1、print语句,可以给它传递零或多个用逗号隔开的表达式。
此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出。
>>> print("我很漂亮,","yes?")
我很漂亮, yes?
2、str(): 函数返回一个用户易读的表达形式。repr(): 产生一个解释器易读的表达形式。
>>> a='hello,world!' >>> str(a) 'hello,world!' >>> repr(a) "'hello,world!'" >>> str(1/3) '0.3333333333333333'
二、读取键盘输入
input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘。
input 可以接收一个Python表达式作为输入,并将运算结果返回。
>>> str=input("请输入:")
请输入:bianbian
>>> print(str)
bianbian
三、文件操作
文件操作的流程:
- 打开文件,得到文件句柄赋值给一个变量
- 通过文件句柄,对文件进行操作
- 关闭文件
1、基本读取文件
open() 将会返回一个 file 对象,基本语法格式如下:
open(filename, mode)
- filename:包含了你要访问的文件名称的字符串值。
- mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
>>> f=open("/Users/bianbian/Desktop/cart.json","r")
>>> data=f.read()
>>> print(data)
我叫便便
my name is bianbian
123456789
abcdefg
>>> f.close()
注: f 叫文件句柄,它包含文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置
>>> f=open("/Users/bianbian/Desktop/cart.json","r")
>>> data=f.read()
>>> data1=f.read()
>>> print(data)
我叫便便
my name is bianbian
123456789
abcdefg
>>> print(data1) #data2的数据为空
>>>
因为在文件中 ,维护一个类似文件指针的一个东西,这个文件指针类似于我们平时操作文件时的光标的东西,所以当第1次读文件时,文件指针已经指向最后一个位置,所以第2次再去读取的时候,是从最后一个位置开始读取的,所以读取的为空。
不同模式打开文件的完全列表:
| 模式 | 描述 |
|---|---|
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2、高效读取文件行
readline() 读取一行文件
>>> f=open("/Users/bianbian/Desktop/cart.json","r")
>>> print(f.readline())
我叫便便
readlines()把文件中的每一行作为一个元素形成一个列表
>>> print(f.readlines()) ['my name is bianbian ', '123456789 ', 'abcdefg']
正常循环读取文件中的每一行
f=open("/Users/bianbian/Desktop/cart.json","r")
for index,line in enumerate(f.readline()):
if index == 2: #当下标值为2时,不打印
print("----------------")
continue
print(line.strip())
f.close()
我
叫
----------------
便
当读取的文件很大时,把几十个G的数据放到内存,内存肯定是受不了的,所以这种方法只适合小文件,不适合大文件。
f=open("/Users/bianbian/Desktop/cart.json","r")
count=0
for line in f:
if count == 3:
print("----------------")
count+=1
continue
print(line.strip())
count+=1
f.close()
f文件变成迭代器,结果:
我叫便便 my name is bianbian 123456789 ---------------- 我叫便便 my name is bianbian 123456789 abcdefg我叫便便 my name is bianbian 123456789 abcdefg
读取文件时,是一行一行的读取,而且,读取一行删除一行,内存中只保留一行。原因:f文件变成迭代器,它已经不再是一个列表的形式了,不能通过下标值来获取,需要一个计数器来计数。
3、及时关闭文件
为了避免打开文件后忘记关闭,可以通过管理上下文的方法。当with代码块执行完毕时,内部会自动关闭并释放文件资源。
with open('log','r') as f:
Python 3 ,with又支持同时对多个文件的上下文进行管理
with open('log1') as obj1, open('log2') as obj2:
pass
上面打开多个文件会导致一行代码过长,python官方建议,一行代码不超过80个字符,所以打开多个文件建议以下写法:
with open('log1') as obj1,
open('log2') as obj2:
pass
4、文件修改
修改文件:先读文件,一边读操作,再一边写,也就是说写需要命令一个新的文件,编写成功后,把老的文件删掉,把新文件重新命名成老文件。
#读取老文件
f=open("/Users/bianbian/Desktop/cart.json",'r',encoding="utf-8")
#写入新文件
f_new=open("/Users/bianbian/Desktop/cart_new.json",'w',encoding="utf-8")
for line in f:
#一边读老文件,修改内容
if "我叫便便" in line:
line = line.replace("我叫便便","便便很可爱")
# 一边在新文件中写入
f_new.write(line)
f.close()
f_new.close()
修改前的文件:
我叫便便
my name is bianbian
123456789
abcdefg
我叫便便
my name is bianbian
123456789
abcdefg我叫便便
my name is bianbian
123456789
abcdefg
修改后的文件:
便便很可爱
便便很可爱
abcdefg便便很可爱