day08

1、文件操作

  1.1、對文件的讀

 1 # 事先在E盤下創建一個文本文檔並讀取
 2 f = open('E:\新建文本文檔.txt',mode='r',encoding='ANSI')
 3 content = f.read()
 4 print(content)
 5 f.close()
 6 
 7 # 事先在項目下創建一個文本文檔,再去讀它
 8 f = open('demo',mode='r',encoding='utf-8')
 9 content = f.read()
10 print(content)
11 f.close()
12 
13 # 以二進制打開,這種讀取方式主要用於非文字文件
14 f = open('demo',mode='rb')
15 content = f.read()
16 print(content)
17 f.close()

  1.2、對文件的寫

 1 # 沒有此文件就會創建文件,已有此文件就會將源文件中的內容刪除,再寫。
 2 # 注意寫的時候光標在內容的前面
 3 f = open('demo1',mode='w',encoding='utf-8')
 4 f.write('只寫,再添加')
 5 f.close()
 6 
 7 # wb
 8 f = open('demo2',mode='wb')
 9 f.write('只寫,再添加'.encode('utf-8'))
10 f.close()

  1.3、追加

1 # 追加:a
2 f = open('demo2',mode='a',encoding='utf-8')
3 f.write(',追加')
4 f.close()
5 
6 # 二進制追加:ab
7 f = open('demo2',mode='ab')
8 f.write(',二進制追加'.encode('utf-8'))
9 f.close()

  1.4、讀寫操作

 1 # 先讀,再寫:r+
 2 f = open('demo2',mode='r+',encoding='utf-8')
 3 print(f.read())
 4 f.write(',先讀,再寫')
 5 f.close()
 6 
 7 # 在讀寫模式下,進行寫讀
 8 # 若demo下的內容為python,我先寫入aaa,再進行讀,會發現讀出來的內容是hon,而demo下的內容是aaahon
 9 # 請記住,在讀寫模式下進行寫讀,寫入的內容會從前往後,替換原有的內容,讀出的內容是沒有被替換的內容
10 f = open('demo',mode='r+',encoding='utf-8')
11 f.write('aaa')
12 print(f.read())
13 f.close()
14 
15 # 以二進制進行讀寫
16 f = open('demo2',mode='r+b')
17 print(f.read())
18 f.write(',以二進制類型讀寫'.encode('utf-8'))
19 f.close()

  1.5、寫讀操作

# 正常的先寫再讀,雖然能寫入內容,但是卻讀不出來,但是只要在寫之後加一個f.seek(0),將光標移到最前面,就可以讀出來了
f = open('demo2',mode='w+',encoding='utf-8')
f.write('寫讀')
f.seek(0)
print(f.read())
f.close()

# 以二進制進行寫讀
f = open('demo2',mode='w+b')
f.write('以二進制寫讀'.encode('utf-8'))
f.seek(0)
print(f.read())
f.close()

  1.6、追加之後再讀取

# a是追加,追加之後對他進行讀會報錯
f = open('demo2',mode='a',encoding='utf-8')
f.write('追加')
print(f.read())
f.close()

# 使用a+之後,對他進行追加,再將光標移動到0,再讀就可以了
f = open('demo2',mode='a+',encoding='utf-8')
f.write('追加')
f.seek(0)
print(f.read())
f.close()

  1.7、一些功能講解

    1.7.1、截取源文件的字符

 1 f = open('demo2',mode='r+',encoding='utf-8')
 2 content = f.read(3) # 讀出來的都是字符,讀取前三個
 3 print(content)
 4 f.close()
 5 
 6 f = open('demo2',mode='r+',encoding='utf-8')
 7 f.seek(2) # 定位到第三個,讀剩下的。
 8 content = f.read()
 9 print(content)
10 f.close()

    1.7.2、對seek功能的講解

# 若demo2中的內容是中文,如:你好啊
f = open('demo2',mode='r+',encoding='utf-8')
f.seek(3) # result:好啊
f.seek(2) # 會報錯
content = f.read()
print(content)
f.close()
# 解釋:seek定位是按照字節來定位的,一个中文三個字節,若seek(3)則正好定位到第二個字,若小於三,就定位不到第一個,就會報錯

    1.7.3、tell()、readable()、readline()、readlines()、truncate()

f = open('demo',mode='r+',encoding='utf-8')
content = f.read()
print(content)
print(f.tell())# 得到當前光標的位置
print(f.readable())# 判斷是否可讀
print(f.readline())# 一行一行的讀
print(f.readlines())# 每一行當成列表中的一個元素,添加到list中
f.truncate(2)# 從源文件中截取字符串,源文件會被改變
f.close()

    1.7.4、對文件進行for循環

1 對文件進行for循環
2 f = open('demo',mode='r+',encoding='utf-8')
3 for ln in f:
4     print(ln)

    1.7.5、with open()

1 # 寫close可能有時候會忘記寫,使用with open就不需要close
2 with open('demo',mode='r+',encoding='utf-8') as f:
3     print(f.read())
4 
5 # 同時打開多個進行操作
6 with open('demo',mode='r+',encoding='utf-8') as f,\
7         open('demo',mode='r',encoding='utf-8') as f1:
8     print(f.read())
9     print(f1.read())

    1.7.6、登錄註冊功能的應用

 1 username = input('請輸入用戶名')
 2 password = input('請輸入密碼')
 3 with open('demo',mode='w',encoding='utf-8') as f:
 4     f.write('{}\n{}'.format(username,password))
 5 print('恭喜您註冊成功!')
 6 lis = []
 7 i = 0
 8 while i < 3:
 9     usn = input('請輸入用戶名')
10     pwd = input('請輸入密碼')
11     with open('demo',mode='r+',encoding='utf-8') as f1:
12         for ln in f1:
13             lis.append(ln)
14     if lis[0].strip() == usn and lis[1].strip() == pwd:
15         print('恭喜您,登錄成功')
16         break
17     else:print('賬號密碼錯誤')
18     i += 1

  1.8、如何去修改文件,刪除文件,重命名文件

    有一個文件,我想去修改他的內容,但是我想讓別人能夠看出來修改后的文件和修改之前的文件,那麼我要怎麼做呢?

 1 # with open('原文件','w',encoding='utf-8') as f:
 2 #     f.write('原文件,未修改')
 3 
 4 # 修改文件
 5 with open('原文件',encoding='utf-8') as f,open('現文件','w',encoding='utf-8') as f1: # open語句中,未指定操作方式,則默認為r,此外mode可以不寫,直接寫操作方式。
 6     for ln in f:
 7         if '未修改' in ln:
 8             ln = ln.replace('未修改','已修改')
 9         f1.write(ln)
10 
11 import  os
12 # 刪除原文件
13 os.remove('原文件')
14 # 重命名文件
15 os.rename('現文件','原文件')

 

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *