文件内容如下:
我住长江头,
君住长江尾,
日日思君不见君,
共饮长江水。
filpath = r'Y:\version\note.txt'
file1 = open(filpath)
print(file1.read())#read读取全部
file1.seek(0)#让光标回到最前面,0表示偏移0个字节,单位是字节,utf-8中一个汉字是两个字节,所以至少要偏移2个字节,偏移一个会报错。一个字母占一个字节
print(file1.readline().strip(),)#readline读取一行,包括后面的换行符,如果不加strip,打印出来会多一个换行符
print(file1.readlines())#readlines按行读取所有,以列表的形式存放。
file1.close()
输出
我住长江头,
君住长江尾,
日日思君不见君,
共饮长江水。
我住长江头,
['君住长江尾,\n', '日日思君不见君,\n', '共饮长江水。']
with open(filpath2,'r+') as f1:#简写方式
f1.write('d')
open函数有两个参数,第一个是文件(包含路径),第二个是读写模式,第二个参数省略时默认是r模式。
具体模式如下:
r:只读,文件不存在报错
r+ :读写,文件不存在报错,写入是覆盖写入(覆盖写入是从第一个开始覆盖,如果写入的字符少,后面原有字符就不会被覆盖)
rb:只读,以二进制形式读取
w:只写,文件不存在创建文件,写入是清空写入
w+:读写,文件不存在创建文件,写入是清空写入
wb:以二进制形式读写
a:只写,文件不存在创建文件,写入是追加写入
ab:以二进制形式追加写入
a+:读写,文件不存在创建文件,写入是追加写入
如果遇到乱码问题:
1、检查文件的编码
2、检查pycharm的编码:settings—editor——file encodings,选择正确编码
字典:
1、字典是无序的,set 集合也是无序的,list是有序的。
dict1 = {'A':'apple','B':'book'}
dict2 = {'B':'book','A':'apple'}
print(dict1 == dict2)
输出
True
2、字典的键必须是不可变对象,字典的值可以是存放任意对象。
dict1 = {['a']:[1,2,3,4]}
print(dict1)
错误:
TypeError: unhashable type: 'list'
dict1 = {1:[1,2,3,4]}
print(dict1)
dict1 = {(1,):{'A':[1,2,3,(4,5)]}}
print(dict1)
输出:
{(1,): {'A': [1, 2, 3, (4, 5)]}}
3、字典的健是唯一的
dic = {'A':'abc','A':'def'}#最后保存的是def
print(dic)
输出
{'A': 'def'}
4、字典中,新增健和修改键值的语句是一样的,字典会自己判断是新增还是修改,没有的话就新增,有的话就修改。
5、update()方法可以修改或者新增多个键值
dic = {'A':'abc','B':'def'}
print(dic)
print(dic['A'])
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
print(dic)
输出
{'A': 'abc', 'B': 'def'}
abc
{'A': [1, 3, 4], 'B': 'def', 'C': 123, 'D': (1, 3, 4)}
6、删除字典中的键值对
dic = {'A':'abc','B':'def'}
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
del dic['D']
print(dic)
输出
{'A': [1, 3, 4], 'B': 'def', 'C': 123}
7、清空
这种方法id不变
dic = {'A':'abc','B':'def'}
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
print(id(dic))
dic.clear()
print(id(dic))
print(dic)
输出
35027920
35027920
{}
这种方法id会变
dic = {'A':'abc','B':'def'}
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
print(id(dic))
dic = {}
print(id(dic))
print(dic)
输出
33258448
33258520
{}
8、遍历字典中的健、值、键值对
dic = {'A':'abc','B':'def'}
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
print(type(dic.keys()))#类列表,但是不是列表,可以遍历,但是不恩呢该使用下标
for i in dic.keys():
print(i)
print(dic.keys()[1])#不能下标,报错
输出:
print(dic.keys()[1])
TypeError: 'dict_keys' object does not support indexing
<class 'dict_keys'>
A
B
C
D
#可以使用list方法,将类列表转化为列表,再使用下标
list3 = list(dic.keys())
#键值对
dic = {'A':'abc','B':'def'}
dic.update({'A':[1,3,4],'C':123,'D':(1,3,4)})
for k,v in dic.items():
print(k,v)
输出
A [1, 3, 4]
B def
C 123
D (1, 3, 4)
9、json格式,比较像字典,但属于str类型
#json和字典有点差别,json{}里面必须是双引号的,字典可以是双引号也可以是单引号或者三引号。所以,如果是单引号,可以确定是字典,但是双引号不确定是字典还是json格式。下面代码注意看输出,字典默认是用的单引号。
str1 = '''{
"aac003":"tom",
"tel":"13018928871",
"crm003":"1",
"crm004":"1"}
'''
print(type(str1))
import json
str1_new = json.loads(str1)
print(type(str1_new))
print(str1_new)
str2 = json.dumps(str1_new)
print(type(str2))
print(str2)
输出:
<class 'str'>
<class 'dict'>
{'aac003': 'tom', 'tel': '13018928871', 'crm003': '1', 'crm004': '1'}
<class 'str'>
{"aac003": "tom", "tel": "13018928871", "crm003": "1", "crm004": "1"}