Python檔案的讀寫以及解決報錯io.UnsupportedOperation: not readable
編碼解碼知識
print('肥鼠'.encode('utf-8'))
print('肥鼠'.encode('gbk'))
print(b'\xe8\x82\xa5\xe9\xbc\xa0'.decode('utf-8'))
print(b'\xb7\xca\xca\xf3'.decode('gbk'))
列印出來的是下圖
b'\xe8\x82\xa5\xe9\xbc\xa0'
b'\xb7\xca\xca\xf3'
肥鼠
肥鼠
如果出現報錯SyntaxError: unexpected EOF while parsing,看看我們是否少打了括號之類的
print(b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2\xe4\xbd\xa0'.decode('utf-8'))
print(b'\xce\xd2\xcf\xb2\xbb\xb6\xc4\xe3'.decode('gbk'))
哈哈哈,這是程式設計師的一種悶騷表白方式。
我喜歡你
我喜歡你
所謂的編碼,其實本質就是把str(字串)型別的資料,利用不同的編碼表,轉換成bytes(位元組)型別的資料。
print(type('肥鼠'))
print(type(b'\xe8\x82\xa5\xe9\xbc\xa0'))
<class 'str'>
<class 'bytes'>
\x代表分隔符
$ python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> open('/home/warmtree/文件/919.odt')
<_io.TextIOWrapper name='/home/warmtree/文件/919.odt' mode='r' encoding='UTF-8'>
>>> file=open('/home/warmtree/文件/919.odt','r',encoding='utf-8')
>>> filecont=file.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/warmtree/anaconda3/lib/python3.7/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc6 in position 15: invalid continuation byte
>>> print(file.read())
報錯
f = open('./1.txt', 'a',encoding='utf-8')
f.write('難唸的經\n')
fc=f.read()
print(fc)
f.close()
io.UnsupportedOperation: not readable
為什麼不能直接在write()後面直接承接read()
f1 = open('./1.txt','a',encoding='utf-8')
#以追加的方式開啟一個檔案,儘管並不存在這個檔案,但這行程式碼已經建立了一個txt檔案了
f1.write('難唸的經')
#寫入'難唸的經'的字串
f1.close()
#關閉檔案
f2 = open('./1.txt','r',encoding='utf-8')
#以讀的方式開啟這個檔案
content = f2.read()
#把讀取到的內容放在變數content裡面
print(content)
#列印變數content
f2.close()
#關閉檔案
新的知識點
為了避免開啟檔案後忘記關閉,佔用資源或當不能確定關閉檔案的恰當時機的時候,我們可以用到關鍵字with,之前的例子可以寫成這樣:
# 普通寫法
file1 = open('abc.txt','a')
file1.write('張無忌')
file1.close()
# 使用with關鍵字的寫法
with open('abc.txt','a') as file1:
#with open('檔案地址','讀寫模式') as 變數名:
#格式:冒號不能丟
file1.write('張無忌')
#格式:對檔案的操作要縮排
#格式:無需用close()關閉
小練習
為什麼這樣的讀取方式為空
file=open('/home/warmtree/code/python/test.txt','r',encoding='utf-8')
file_content=file.read()
print('file.read()\n',file_content)
file_lines = file.readlines()
file.close()
print(file_lines)
重新書寫一遍檔案open則可以逐行顯示:
# open the file using open()
file=open('/home/warmtree/code/python/test.txt','r',encoding='utf-8')
file_content=file.read()
print('file.read()\n',file_content)
file.close()
'''
file_lines = file.readlines()
file.close()
print(file_lines)
'''
file1 = open('/home/warmtree/code/python/test.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
print(file_lines)
# open the file using open()
file=open('/home/warmtree/code/python/test.txt','r',encoding='utf-8')
file_content=file.read()
print('file.read()\n',file_content)
'''
file.read()
羅恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
馬爾福 100 85 90
'''
file.close()
'''
file_lines = file.readlines()
file.close()
print(file_lines)
'''
file1 = open('/home/warmtree/code/python/test.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
#readlines() 會從txt檔案取得一個列表,列表中的每個字串就是scores.txt中的每一行。而且每個字串後面還有換行的\n符號
print(file_lines)
'''
['羅恩 23 35 44\n', '哈利 60 77 68 88 90\n', '赫敏 97 99 89 91 95 90\n', '馬爾福 100 85 90']
'''
for i in file_lines: #用for...in...把每一行的資料遍歷
print(i) #列印變數i
'''
羅恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
馬爾福 100 85 90
'''
#把這裡每一行的名字、分數也分開,這時需要我們使用split()來把字串分開,它會按空格把字串裡面的內容分開
for i in file_lines: #用for...in...把每一行的資料遍歷
data =i.split() #把字串切分成更細的一個個的字串
print(data) #列印出來看看
'''
['羅恩', '23', '35', '44']
['哈利', '60', '77', '68', '88', '90']
['赫敏', '97', '99', '89', '91', '95', '90']
['馬爾福', '100', '85', '90']
'''
Join()用於字串的合併
a=['c','a','t']
b=''
print(b.join(a))
# c a t
c='-'
print(c.join(a))
#c-a-t
有些問題待處理
file1 = open('winner.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
print(file_lines)
dict_scores={}
list_scores = []
final_scores = []
for data in file_lines:
data.split()
print(data[0:3])
print(data[-4:])
list_scores.append(int(data[-4:]))
#del data[-4:]
print(data)
print(list_scores)
list_scores.sort()
print(list_scores)
相關文章
- Python檔案讀寫--錯誤一Python
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- 「Python」:檔案讀寫Python
- Linux中常見的檔案讀寫錯誤問題及解決方法!Linux
- Python中的檔案讀寫Python
- .gitignore檔案配置以及gitee提交報Push rejected...錯誤解決Gitee
- Python 檔案讀寫(Python IO)Python
- python讀寫excel檔案PythonExcel
- python檔案讀寫操作Python
- Python讀寫檔案你真的瞭解嗎?Python
- python config配置檔案的讀寫Python
- Python中的檔案的讀寫操作Python
- Hadoop hdfs上傳檔案報錯解決Hadoop
- Python中讀寫Parquet檔案的方法Python
- Python:讀寫檔案(I/O) | 組織檔案Python
- python 將檔案大小轉換為human readable 的大小表示Python
- docker系列-報錯以及解決指南Docker
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- Python檔案讀寫、StringIO和BytesIOPython
- Python之檔案讀寫小練Python
- python學習之讀寫檔案Python
- Python中的檔案讀寫-實際操作Python
- 檔案的讀寫
- Python 簡明教程 --- 24,Python 檔案讀寫Python
- python檔案中寫中文亂碼怎麼解決Python
- Drozer 查詢可被其他應用讀取 / 寫入的檔案時,報錯
- python 解決讀取檔案時格式不支援的總結Python
- python檔案建立、讀取和寫入Python
- Python讀寫EXCEL檔案常用方法大全PythonExcel
- 下載HuggingFace模型的方法以及報錯解決模型
- 【python系統學習17】python中的檔案讀寫Python
- 普通檔案的讀寫
- 詳解node.js中的可讀流(Readable)和可寫流(Writeable)Node.js
- 瞭解如何用 Bash 讀寫檔案
- Larabel遷移檔案時報SQLSTATE[42000]錯誤的解決方法SQL
- Nginx 405 以及301 解決報錯記錄Nginx
- Python常見檔案讀寫方法有哪些?Python