幫更正最後一段 #----- import json with open("config.json", mode="r") as file: data = json.load(file) print(data) data["name"] = "New Name" # 修改變數資料 # 把最新的資料複寫回檔案中 with open("config.json", mode="w") as file: data = json.dump(data, file) >>> {"name":"New Name", "version":"1.2.5"}
#儲存檔案 file=open("13data.txt",mode="w",encoding="utf-8") #開啟 file.write("Hello file 好棒棒")#操作 file.close()#關閉 with open("13-1data.txt",mode="w",encoding="utf-8") as file: file.write("5 3") #讀取檔案 with open("13-1data.txt.",mode="r",encoding="utf-8") as file: data=file.read() print(data) #把檔案中的數字資料,一行一行讀取出來並計算總合 sum=0 with open("13-1data.txt.",mode="r",encoding="utf-8") as file: for line in file: #一行一行的讀取 sum=sum+int(line) print(sum) #使用json格式讀取,複寫資料 import json with open("13config.json", mode="r") as file: data=json.load(file) print("name:",data["name"])# data是一個字典資料 print("version:",data["version"]) data["name"]="new name"#修改變數中的資料 # 把最新的資料複寫回檔案中 with open("13config.json", mode="w") as file: data=json.dump(data, file)
1. 可以哦,可能是其他程式的搭配沒處理好。 2. 這個問題非常的好,其實 for in 的後面不一定要是列表,他是一個更廣泛的概念就做 Iterable Object,但這個概念有點深入,所以我入門教學的時會稍微簡化或省略細節。 file 物件本身是一個 Iterable Object 所以可以放在 for in 的後面。for data in file.read() 則是把 file.read() 取得的字串放在 for in 的後面,不太一樣的狀況。
以下是我跑請問老師25:56的程式碼結果,我檢查了很久但都沒有頭緒。想請教老師問題點為何? runfile('D:/python_training/L12文字檔的讀取與儲存.py', wdir='D:/python_training') Traceback (most recent call last): File "D:\python_training\L12文字檔的讀取與儲存.py", line 34, in data=json.load(file) File "C:\Users\Administration\anaconda3\lib\json\__init__.py", line 296, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Users\Administration\anaconda3\lib\json\__init__.py", line 348, in loads return _default_decoder.decode(s) File "C:\Users\Administration\anaconda3\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\Administration\anaconda3\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Expecting value
請教老師: 程式如下,為何讀取檔案時,print(data)可以正確執行,但計算總和print(sum)結果卻為0呢?謝謝 #儲存檔案 with open("test.txt", mode="w") as file: file.write("1 2 3 4 5") #讀取檔案 with open("test.txt",mode="r") as file: data=file.read() print(data) sum=0 for n in file: sum+=int(n) print(sum)
彭彭老師您好,關於json導入和讀取的問題。我在file.py內輸出了相同的程序後,執行程序時出現了下列錯誤: Traceback (most recent call last): File "file.py", line 21, in data=json.load(file) File "C:\Python\Python37\lib\json\__init__.py", line 296, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Python\Python37\lib\json\__init__.py", line 348, in loads return _default_decoder.decode(s) File "C:\Python\Python37\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Python\Python37\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 想請教一下這個錯誤該如何解決,謝謝@@
老師您好, 我有一段程式碼如下 with open("data.txt", mode="w", encoding="utf-8") as file: file.write("5 6 7 8") sum=0 with open("data.txt", mode="r") as file: print (file.read() ) for line in file: sum+=int(line) print("sum=",sum) ================================================== 這樣得到的結果是這樣 5 6 7 8 sum= 0 sum算出來是0, 不是26 ================================================== 我把print(file.read()) mark起來, with open("data.txt", mode="w", encoding="utf-8") as file: file.write("5 6 7 8") sum=0 with open("data.txt", mode="r") as file: #print(file.read()) for line in file: sum+=int(line) print("sum=",sum) ================================================== 這樣就可能正確算出sum為26 想請問老師為什麼一開始最上面那一段, 想要先print (file.read()), sum卻變成0
彭彭老師你好,想請教一下 我用with open('data.txt','r',encoding='ANSI') as file: print(file.read()) 就可以讀出全部的資料 換用with open('data.txt','r',encoding='ANSI') as file: for line in file: print(file.read()) 就會少讀了第一行 怎麼會這樣呢?
个人理解:1.line在这里是作为字符串型的数据,int(line)是将line取成整数型的数据;2.如果按照你的写法,也是先将line取成整数型数据,但是你后面sum+=line这一块,实际上加的是字符串型的数据,而字符串型数据不能直接做算术运算;3.如果一定要分开写的话,可以增加一个中间变量: for line in file: a=int(line) sum+=a 我是这样理解的,如果有不对的地方可以一起探讨XD
請教老師按照您的code:該如何解決呢~ import json with open('config.json') as file: data=json.load(file)後出現以下 File "C:\Users\user\anaconda3\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Expecting value
想請問老師,我在跑26:08那段程式時跑出了這樣的資訊,請問要怎麼辦? runfile('C:/Users/user01/Desktop/遠/python/文字檔案的讀取和儲存.py', wdir='C:/Users/user01/Desktop/遠/python') Traceback (most recent call last): File "C:\Users\user01\Desktop\遠\python\文字檔案的讀取和儲存.py", line 40, in data=json.load(file) File "D:\spyder\lib\json\__init__.py", line 296, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "D:\spyder\lib\json\__init__.py", line 348, in loads return _default_decoder.decode(s) File "D:\spyder\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "D:\spyder\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Expecting value
老師您好: sum=0 with open("data.txt",mode="r", encoding="utf-8") as file: for ns in file: sum+=int(ns) print(sum) 請教 sum+=int(ns) 與 sum==sum+int(ns) 的差別? 因計算出來不是8是0 謝謝!
Hi K'Y 分享我的理解 因為使用 with open() as file 的關係,離開 with 的區塊 (從縮排判斷)檔案就被關閉了 所以第五行程式碼的 json.dum(data, file) 找不到預期被開啟 (open)的檔案,所以後來改用一般的開啟檔案方式就沒有這個問題 如果想要解決這個問題,將第四和第五行都做縮排,應該就可以解決問題了
你使用 with 敘述,離開 with 區塊後,file 會被關閉,所以要把程式寫在 with 的區塊內: import json with open("config.json",mode="r+") as file: data = json.load(file) data["name"] = "New Name" json.dump(data,file)
我想請問老師,我這一段有打錯嗎? 因為一直跑不出data.txt 還是是其他部分的錯誤?感謝彭彭老師!!! file=open("data.txt", mode="w", encoding="utf-8") file.write("hello file") file.close() with open("data.txt", mode="w", encoding="utf-8") as file: file.write("Hello File Second Line") sum=0 with open("data.txt",mode="r", encoding="utf-8")as file: for line in file: sum=int(line) print(sum) import json with open("config.json",mode="r")as file: data=json.load(file) print(data) data["name"]="new name" with open("config.json",mode="w")as file: json.dump(data,file)
老師你好,有個小地方一直搞不懂>< ("17:47"的地方) 想請問為什麼 x 要加 int 不能直接sum+=x ? x不是本來讀出來就是數字? 謝謝老師 sum=0 with open("data.txt",mode="r",encoding="utf-8") as file: for x in file: sum+=int(x) print(sum)
老師您好,想請問以下問題 有看到影片說明不要使用file.read()去計算總和,但仍想釐清以下疑問 1.為什麼以()read程式碼執行印出結果不會包含空行 with open("0719-3.txt", mode = "w") as file: file.write("99 100 101") with open("0719-3.txt", mode = "r", encoding="utf-8") as file: total = 0 w = file.read() print(w) 結果印出--> 99 100 101 且若以下列方式印出卻會印出 ”錯誤訊息“ with open("0719-3.txt", mode = "r", encoding="utf-8") as file: total = 0 w = file.read() total += int(w) print(total) 結果印出-->invalid literal for int() with base 10: '99 100 101' 2.為什麼以for in loop執行會印出 ”兩行空行“ ? with open("0719-3.txt", mode = "w") as file: file.write("99 100 101") with open("0719-3.txt", mode = "r", encoding = "utf-8") as file: for i in file: print(i) 結果印出-> 99 100 101 3.我理解您說明計算要使用for in 但仍想知道檔案讀取內容的差異和for in loop明明讀出空行卻不會跑出invalid literal for int() with base 10: '99 100 101' 之錯誤訊息? 再麻煩您的說明,感謝!
請問老師: import json #這邊為甚麼不能用import config.json ?? with open('config.json',mode='r') as file: #打開json檔 data=file.read() #這邊為何不能照先前這樣讀取檔案? 而必須data=json.load(file) ??否則他說string indices must be integers??
不好意思 問個 我已經老師打的完全一樣了(9:00)為甚麼還是出現C:\Users\USER\AppData\Local\Programs\Python\Python38-32\python.exe: can't open file 'file.py': [Errno 2] No such file or directory
彭彭老師算是台灣唯一的程式教學,謝謝你讓我們可以清楚的吸收內容,就不用去練英聽,加油💪
其實還是有很多其他的老師在教學哦 :) 不過謝謝回饋哪,很高興對你有幫助,加油 💪💪
彭彭老师讲的非常的通俗易懂,而且教学氛围感觉很棒,学东西,像是在玩一样,非常的有条理并且娓娓道来,非常感谢你的课程,让一头雾水的我,终于搞明白了。
谢谢呦,对你有帮助我觉得很棒 :)
*檔案操作流程*
開啟檔案 > 讀取或寫入 > 關閉檔案
*開啟檔案*
檔案物件 = open(檔案路徑,mode=開啟模式)
讀取模式 - r
寫入模式 - w
讀寫模式 - r+
檔案物件.read()
for 變數 in 檔案物件:
從檔案依序讀取每行文字到變數中
import json
讀取到的資料 = json.load(檔案物件)
*寫入檔案*
檔案物件.write(字串) # 把要儲存的內容放在字串的位置
檔案物件.write("這是範例文字
")
import json
json.dump(要寫入的資料,檔案物件)
*關閉檔案*
檔案物件.close()
with open(檔案路徑,mode=開啟模式) as 檔案物件:
讀取或寫入檔案的程式
# 以上區塊會自動、安全地關閉檔案
# 不需要另外再寫close()
# -------
# 儲存檔案
# -- file.py --
file = open("data.txt", mode="w") # 開啟
file.write("Hello File") # 操作
file.close() # 關閉
# 同個檔案再寫一次,舊檔會被覆蓋
file = open("data.txt", mode="w") # 開啟
file.write("Hello File
Second Line") # 操作
file.close() # 關閉
# 避免打中文會出現亂碼UTF-8
file = open("data.txt", mode="w", encoding="utf-8") # 開啟
file.write("測試中文
好棒棒") # 操作
file.close() # 關閉
# 最佳實務寫法
with open("data.txt", mode="w", encoding="utf-8") as file:
file.write("測試中文
好棒棒")
# 讀取檔案
with open("data.txt", mode="r", encoding="utf-8") as file:
data = file.read()
print(data)
>>> 測試中文
>>> 好棒棒
# 讀取檔案
# 把檔案中的數字資料,一行行讀取出,並計算總和
with open("data.txt", mode="w", encoding="utf-8") as file:
file.write("5
3")
sum = 0
with open("data.txt", mode="r", encoding="utf-8") as file:
for line in file: # 一行行讀取
sum+=int(line)
print(print)
>>> 8
# 使用JSON格式讀取、複寫檔案
# -- config.json --
{
"name":"My Name",
"version":"1.2.5"
}
# -- file.py --
import json
# 從檔案中讀取 JSON 資料,放入變數data裡面
with open("config.json", mode="r") as file:
data = json.load(file)
print("name", data.name)
print("version", data.version)
>>> AttributeError
# -----
import json
with open("config.json", mode="r") as file:
data = json.load(file)
print(data) # data 是一個字典資料
print("name", data["name"])
print("version", data["version"])
>>> {"name":"My Name", "version":"1.2.5"}
>>> name My Name
>>> version 1.2.5
# -----
import json
with open("config.py", mode="r") as file:
data = json.load(file)
print(data)
data["name"] = "New Name" # 修改變數資料
# 把最新的資料複寫回檔案中
with open("config.json", mode="r") as file:
data = json.dump(data, file)
>>> {"name":"New Name", "version":"1.2.5"}
謝謝 ~~
幫更正最後一段
#-----
import json
with open("config.json", mode="r") as file:
data = json.load(file)
print(data)
data["name"] = "New Name" # 修改變數資料
# 把最新的資料複寫回檔案中
with open("config.json", mode="w") as file:
data = json.dump(data, file)
>>> {"name":"New Name", "version":"1.2.5"}
老師的課程一步一步, 為什麼要這麼用都解釋得很清楚! 對於學習上幫助很大, 很感謝!
很高興對你有幫助 :)
謝謝彭彭老師的指點啟示 憑著信心把舊有的檔名刪除 然後再把程式碼重打一遍 重新另取檔名 leu.py 果然過關成功
心裡的喜悅無以名狀 感謝老諄諄教導 一位跟著老師默默學習的老學生敬謝
恭喜你自己嘗試新的東西成功,這是很重要的一步 :)
感謝老師 您是所有線上教學最棒的老師 感恩!!!!
# 檔案操作流程:1.開啟檔案 2.讀取或寫入 3.關閉檔案
# 第一步開啟檔案:
# 開啟檔案基本語法:
# 檔案物件=open(檔案路徑,mode=開啟模式)
# 開啟模式有三種:讀取模式:r,寫入模式:w,讀寫模式:r+
# 第二步讀取或寫入:
# 讀取全部文字語法:
# 檔案名稱.read()
# 第三步關閉檔案:
# 基本語法:檔案物件.close()
# 範例一:如何開啟中文檔案,並關閉檔案
# 開啟後會在專案資料夾裡產生一個檔案
# 如果想打中文,沒有多打這一行 encoding="utf-8",會出現下列錯誤資訊:
# UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to
file=open("data.txt",mode="w",encoding="utf-8")
file.write("Hello File
Second line")
file.write("好棒棒")
file.close()
# 範例二:最佳實務
# with open(檔案路徑,mode=開啟模式) as 檔案物件:
# 以上區塊會自動安全的關閉檔案
with open("data1.txt",mode="w",encoding="utf-8") as file1:
file1.write("測試中文")
with open("data1.txt", mode="r", encoding="utf-8") as file1:
data=file1.read()
print(data)
# 範例三:把檔案中的的數字資料,一行一行的讀取出來,並計算總合
# 如果要一次讀取一行,可以用 for 迴圈:
# for 變數 in 檔案物件:
# 從檔案依序讀取每行文字到變數中
with open("data2.txt",mode="w") as file2:
file2.write("5
3")
sum=0
with open("data2.txt",mode="r") as file2:
for line in file2:
sum+=int(line)
print(sum)
# 範例四: 如何讀取json檔案,並列印json檔案字典裡的資料
# 讀取JSON格式:
# import json
# 讀取到的資料=json.load(檔案物件)
# 寫入JSON格式:
# import json
# json.dump(要寫入的資料,檔案物件)
import json
with open ("config.json",mode="r") as file3:
data=json.load(file3) #data是一個字典資料
print("name:",data["name"])
print("version:",data["version"])
# 範例五: (承上)如何修改json檔案內的資料: 1.先修改2.再複寫
# 從檔案中讀取 json 資料,放入變數 data 裡面
data["name"]="New Name1" #修改變數中資料
with open("config.json","w") as file4:
json.dump(data,file4) #最後,把最新的資料複寫回檔案中
感謝紀錄 :)
11:10 我之前一直不懂中文字的解決方式 謝謝老師的教導
謝謝你的回饋,有幫助很棒 :)
感謝彭彭老師的講解!!我都聽不懂我們老師在講什麼>__< 經過您的解釋就通了~~
很高興對你有幫助哦 :)
我也是都聽不懂我們老師在講什麼,還好在這邊聽懂了!感謝有彭彭的教學~
彭彭老師這段錄的粉搞笑喔!
給您讚一個!
哈哈哈,謝謝!
感謝分享! 都是一些很實用且重要的觀念~!
謝謝你的回饋 :)
超感謝的啦!超佛心!若能有更多像這樣的好老師世界會更好! 忍不住向老師磕三個頭!
哈哈哈哈,太誇張哪 XDDDD
#儲存檔案
file=open("13data.txt",mode="w",encoding="utf-8") #開啟
file.write("Hello file
好棒棒")#操作
file.close()#關閉
with open("13-1data.txt",mode="w",encoding="utf-8") as file:
file.write("5
3")
#讀取檔案
with open("13-1data.txt.",mode="r",encoding="utf-8") as file:
data=file.read()
print(data)
#把檔案中的數字資料,一行一行讀取出來並計算總合
sum=0
with open("13-1data.txt.",mode="r",encoding="utf-8") as file:
for line in file: #一行一行的讀取
sum=sum+int(line)
print(sum)
#使用json格式讀取,複寫資料
import json
with open("13config.json", mode="r") as file:
data=json.load(file)
print("name:",data["name"])# data是一個字典資料
print("version:",data["version"])
data["name"]="new name"#修改變數中的資料
# 把最新的資料複寫回檔案中
with open("13config.json", mode="w") as file:
data=json.dump(data, file)
感謝紀錄 :)
感謝老師無私分享,觀念清楚,讓人大大受用
謝謝呦,很高興對你有幫助 :)
哈哈哈哈感同深受!
自己也是有寫JavaScript,看到那段也不覺得有問題
整個豁然開朗的感覺XDD
謝謝老師的教學~
哈哈哈哈!
好哦好哦,不會,謝謝你的回饋 :)
兩個問題想請教老師:
1. 為什麼不能直接寫:print(file.read())?
2. 之前在教for語法的時候,有說in的後面必須是列表,現在這樣使用是否代表儲存的檔案物件"file"本質是一種列表呢?為什麼使用for語法時不需寫成:for data in file.read()?
謝謝老師。
1. 可以哦,可能是其他程式的搭配沒處理好。
2.
這個問題非常的好,其實 for in 的後面不一定要是列表,他是一個更廣泛的概念就做 Iterable Object,但這個概念有點深入,所以我入門教學的時會稍微簡化或省略細節。
file 物件本身是一個 Iterable Object 所以可以放在 for in 的後面。for data in file.read() 則是把 file.read() 取得的字串放在 for in 的後面,不太一樣的狀況。
@@cwpeng-course 謝謝老師,剛剛才發現這個問題回覆了XD
1. 我試了一下還是不行,程式碼如下:
#寫入檔案
f = open("file.txt", mode="w", encoding="utf-8")
f.write("Hello
Idiot")
f.close()
#讀取檔案
f = open("file.txt", mode="r", encoding="utf-8")
x = f.read()
print(f.read())
f.close()
執行後一片空白,但如果改成print(x)就沒有任何問題。想問問老師是什麼原因QQ
@@cwpeng-course 2. 謝謝老師的說明,這樣對資料型態有比較了解了,估狗了Iterable Object還是看不太懂,但先這樣好了XD
@@flowerhahaha7192 關鍵在於不能 read() 兩次哦,所以要把 x=f.read() 移除掉,後面的 print(f.read()) 就應該可以了。
@@cwpeng-course 原來如此!謝謝老師!
老師這一集真的很有趣,邊看邊笑完全不會想睡覺😂
XDDDD
非常棒棒的教程,简单易懂又实用。而且我用二倍速播放竟然都不觉得快唉~~~~哈哈哈哈。还是非常感谢!!!
哈哈哈,大家都说用两倍速播放比较刚好 @@a
謝謝作者的製作。
不會
謝謝老師用心教導NumPy使我受益良多,敲碗機器學習課程~^^
哈哈哈,好哦,謝謝你的回饋和期待 XDDDD
彭彭偷笑的時候,不知為何我也很想笑~
XDDDDD
老師的笑點很好笑www
想請教老師如果讀取進來是要"續寫"內容的話
我是先把檔案內容存進變數,然後在變數後面加我要加的新的內容,再把變數寫回檔案
是這樣操作嗎?
是這樣嗎 XDDD
你描述的做法是可以的。也可以在打開檔案的時候使用 mode="a" 就能夠直接把資料串接在後面 ~
@@cwpeng-course 原來如此,感謝老師指導
期待彭彭老師做出更多python的教學影片,這個月已經把前端部分看完了XDD
好哦,我應該會抽空出一些 XDDD
#配合第10堂的function, 製作 fileCopy 功能
def fileCopy(fSrc, fDest):
with open(fSrc, mode="r", encoding="utf-8") as fScrObj:
with open(fDest, mode="w", encoding="utf-8") as fDestObj:
fDestObj.write(fScrObj.read())
fileCopy("main.py","data.txt")
感謝分享 :)
21:50先去看JSon
感謝紀錄 :)
Python 3.8
IDLE
Visual Studio Code 1.44.0
先自己建立2個json檔:
檔案1: test1.json
{
"name":"My Name",
"version":"1.2.5"
}
檔案2: test2.json
{
"Name":"彭彭",
"University":"台灣大學"
}
python 主程式檔: file.py
import json
with open("test1.json",mode="r") as file:
data=json.load(file)
print("name: ",data["name"])
print("version: ",data["version"])
當test1.json改成test2.json時,便會出現錯誤:
Traceback (most recent call last):
File "C:\Users\***\Downloads\python-training\file.py", line 3, in
data=json.load(file)
File "C:\Users\***\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
UnicodeDecodeError: 'cp950' codec can't decode byte 0xe5 in position 43: illegal multibyte sequence
修正:
~
with open("test2.json",mode="r",encoding="utf-8") as file:
data=json.load(file)
~
仍然出現錯誤:
Traceback (most recent call last):
File "C:\Users\***\Downloads\python-training\file.py", line 4, in
print("name: ",data["name"])
KeyError: 'name'
再修正:
import json
data={"Name":"彭彭","University":"台灣大學"}
with open("test2.json",mode="w",encoding="utf-8") as file:
json.dump(data,file)
with open("test2.json",mode="r",encoding="utf-8") as file:
data=json.load(file)
print("Name: ",data["Name"])
print("University: ",data["University"])
才會完全正確無誤
但此時的test2.json檔變為:
{"Name": "\u5f6d\u5f6d", "University": "\u53f0\u7063\u5927\u5b78"}
若修正為:(當然前三行建立並寫入檔案的程式碼已被註解掉了)
{
"Name": "張忠諆",
"University": "台灣積體電路"
}
跑程式後的結果仍然是原來的test2.json內容,但test2.json裡又被改回上面的內容
只要json檔裡要帶有繁體中文字,就只能在python主程式裡開啟並創建一個"原創"的json檔,之後才能去修改json檔裡的內容,這樣才不會出現錯誤,若是先自行建立json檔並使用到繁體中文字,就會發生上面的錯誤
感謝你詳細的經驗分享 :)
非常清楚
謝謝
感謝影片教學!!
這集確實不簡單,我反覆思考了hen 九
加油加油,希望已經有想通了 ~
請問彭彭老師 如何解決“encoding"是無效函式的問題? 我使用mac OS 系統 Python 3.8.2
我上網查到的幾乎都是Python 2才會遇到的問題
感謝老師無私分享教學
這確實可能是版本的問題,如果使用 Mac 電腦,執行程式時打:python3 檔案名稱
這樣試試看,寫中文應該就可以了。
28:28 感覺這邊步調有點過快,
我有在使用JAVA,所以對全局變數、局部變數有點觀念,
看到程式碼,會覺得data為甚麼可以拿到下面使用
收到,感謝你的建議哦 :)
以下是我跑請問老師25:56的程式碼結果,我檢查了很久但都沒有頭緒。想請教老師問題點為何?
runfile('D:/python_training/L12文字檔的讀取與儲存.py', wdir='D:/python_training')
Traceback (most recent call last):
File "D:\python_training\L12文字檔的讀取與儲存.py", line 34, in
data=json.load(file)
File "C:\Users\Administration\anaconda3\lib\json\__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Users\Administration\anaconda3\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\Administration\anaconda3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Administration\anaconda3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value
文字檔案中的內容,可能有些格式上的錯誤,或是忘了儲存 ~
彭彭老師好
我完全新手 超感謝老師的教學 我每天都反覆的看你的教學
請問一下14:50 為什麼file.read()要設變數data,不能直接print(file.read())嗎?
我的理解是
先了解print()裡面只能裝 字串 數字 變數
“變數”是用來存放資料的自定名稱 ps 名字隨你取
以你的問題來說
首先 file 是老師為(”data.txt” )這個檔案,所建立的 nickname;他的本質是檔案。
read() 是”讀取” 的意思 ps:read()是固定寫法
file.read()是把檔案的資料讀取出來
檔案資料讀取出來了之後,但是 print()只能能裝數字 字串 變數,無法裝資料。
所以這時候我會建立一個變數,把資料放在裡面,
即 data=file.read()
這樣就可以用print() ,讓電腦顯示出檔案資料。
我這樣表達清楚嗎?
感謝 @沈榮貴 的說明,很清楚 :)
確實也可以直接 print(file.read()),另外用變數接起來也可以。
21:54 "怎麼自動給我變大寫XD.....我恨它~該死XDD"
被戳到笑點XDDD
XDDDDDDD
老師您好,我照著您的方式做,在24:51的地方出現一些問題,他說FileNotFoundError: [Errno 2] No such file or directory: 'config.json,請問該怎麼解決?🤔🤔
找不到檔案,確認一下檔名有沒有打錯 ~
請教老師:
程式如下,為何讀取檔案時,print(data)可以正確執行,但計算總和print(sum)結果卻為0呢?謝謝
#儲存檔案
with open("test.txt", mode="w") as file:
file.write("1
2
3
4
5")
#讀取檔案
with open("test.txt",mode="r") as file:
data=file.read()
print(data)
sum=0
for n in file:
sum+=int(n)
print(sum)
讀取一次之後,讀寫頭 ( 邏輯上的 ) 就會移動到檔案的最尾部,就不能再讀取第二次。所以必須把前面的
data=file.read()
print(data)
拿掉,後面就可以正常運作。
老師您好 ,想請教您,我在練習data=json.load(file)的時候,輸入了跟教學相同的程式碼。
import json
with open("config.json" , mode="r" ) as file:
data=json.load(file)
print(data)
print("name : " , data["name"])
print("version:" , data["version"])
不過卻跑出以下錯誤訊息:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
想請問是什麼原因呢?謝謝!
檔案本身格式或是編碼的問題。確認你的 config.json 檔案內容是否為 JSON 格式,每一個字都要正確。然後再確認檔案是否使用 UTF-8 編碼,若是使用 VS Code 可以查看畫面的右下角有個顯示編碼的區塊。
老師您好,關於json想要把value改成中文
with open("config.json",mode='w',encoding="utf-8")as file:
data["name"]="中文"
json.dump(data,file)
可是輸出後是亂碼,這樣要怎麼解決
可以確認一下打開檔案的時候,VS Code 的右下角編碼的部份是否選擇使用 UTF-8 編碼。
老師您好,我是剛學習程式的小白,想請問9:03的地方,我照著同步驟操作但是出現FileNotFoundError: [Errno 2] No such file or directory: 'data.txt' 我查到的可能原因是權限問題,請問可以如何解決呢,謝謝老師
錯誤訊息的意思其實就是找不到這個檔案,所以得確認檔案名稱包括副檔名完全正確,以及執行程式是否和教學一樣有先打開專案資料夾,然後在終端機中使用 python 指令執行。
首先感谢老师,顺便问下教程的课件,有提供下载么?
謝謝老師很快地回復 但學生不敏 程式碼雖重新打過 但還是不能成功
檔案名稱 "你的檔案名稱,把 , 包括進去了,應該是 "config.json", mode="r" "
import json
with open("config.json" ,mode="r") as file:
data=json.load(file)
print(data)
print("name:",data["name"])
print("version:",data["version"])
Traceback (most recent call last):
File "json12.py", line 1, in
import json
File "C:\Users\afran\.vscode\python-traning\json.py", line 4, in
with open("config.json,",mode="r") as file:
FileNotFoundError: [Errno 2] No such file or directory: 'config.json,'
PS C:\Users\afran\.vscode\python-traning>
請問老師 我該如何寫 才不會出現上述這種情形:
{我的檔案名稱,把 , 包括進去了,應該是 "config.json", mode="r"
}
煩請老師指正了!
你的程式基本上沒有問題,不過在你的資料夾中,要像我的影片中一樣,先建立一個文字檔案叫做 config.json,程式才能夠讀取到。
老師您好
請問一下這個檔案的部分是針對程式裡的檔案
還是電腦上任何的檔案都可以做操作?
因為是完全的小白
問題可能比較不一樣😂
老師您好
想請問如果我先建一個資料夾"A"給python讀,如果我想在這個資料夾裡面再建一個資料夾"B",然後寫程式在B裡面,那我還是要寫一個主程式在A資料夾嗎?還是有辦法可以直接讀取B資料夾裡面的程式
彭彭老師您好
想請教一下以下的coding問題
---------------------------
file=open("try1.txt", mode="r+",encoding="utf-8")
file.write("try again")
print(file.read())
file.close()
----------------------------
Terminal
PS D:\Python Folder> python try.py
----------------------------
稍微爬過文了,之前的案例好像是兩次read才造成空白的結果
想請問老師這個情況是什麼原因呢 ?
solution
-----------------------------
file=open("try1.txt", mode="r+",encoding="utf-8")
file.write("try again")
file.close()
file=open("try1.txt", mode="r+",encoding="utf-8")
print(file.read())
file.close()
------------------------------
謝謝老師這麼多高品質的影片 !
write 之後你的檔案讀取頭會在檔案的最尾巴,所以無法再讀取到任何東西。關閉重開,讀取頭才會回到檔案的前面。
@@cwpeng-course 了解了! 謝謝彭彭老師
彭彭老师,我希望你做一个,爬去大量图片而且有指定保存路径的教程!!谢谢
谢谢你的建议哪,我会参考的 :)
16:39分的"with open("data.txt",mode="w",encoding="utf-8") as file:
file.write("測試中文
好棒棒")" 為什麼前面為什麼file的前面要空一個tab不然就一直出錯阿而且顯示是f出錯
你问这个问题,证明你没看 彭彭老师 前面的课程!
感謝 @Ming555 的回應 :)
前面要空一個 tab 表示它在 with 的區塊之中,Python 是依賴縮排來辨識程式區塊的 ~
彭彭老師好,
我用兩週的時間,從頭開始,邊看邊學到現在,有漸入佳境之感,太感謝您了!
想請您一個問題:假如我沒有先將data.txt先建立好,那程式碼中我該如何新建一個 .txt 檔呢?
剛入門一周 file=open("data.txt",mode="w",encoding="utf-8")
這部分因為mode=w(寫入)就會自動建立新檔案
如果是mode=r (讀取)就不會建立
我也想知道!!
@@Lyumin 謝謝您!
感謝 @Yu min Lo 的回應,很清楚 :)
彭彭老師您好,關於json導入和讀取的問題。我在file.py內輸出了相同的程序後,執行程序時出現了下列錯誤:
Traceback (most recent call last):
File "file.py", line 21, in
data=json.load(file)
File "C:\Python\Python37\lib\json\__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Python\Python37\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Python\Python37\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
想請教一下這個錯誤該如何解決,謝謝@@
他的意思是檔案中的 json 格式不正確。你可能要仔細比對一下讀取的檔案內容是否和我影片中的一模一樣嘍 ~
我也是遇到同樣的問題! !
我反覆看了一下都沒啥問題,但是就是出現這個錯誤一模一樣,
我的my name是寫小寫開頭 後來改成跟老師一樣是My Name就過了 難道有開頭要大寫的規定嗎??
我也遇到一樣的問題!!想請問您是怎麼解決的呢?
我也遇到一樣的問題! 我原本是用單引號 ' ' ,後來改成雙引號 " " 就解決了,但不知道為甚麼,想請問這是json的規定嗎?
with open("open.txt",mode="r+",encoding="utf-8") as file:
file.write("嗚嗚嗚")
add=file.read()
print(add)
請問老師一下,為何這樣print無法印出 嗚嗚嗚 呢?
要重新打開檔案,再讀取,才能夠取得剛剛寫進去的資料。
概念上是這樣的,檔案操作有一個游標的概念,當你寫入 "嗚嗚嗚",游標就會移動到文字的最後面,再讀取的時候,會從游標的位置開始讀取,所以是讀不到東西的。重新打開檔案,游標會重新從 0 ,也就是最前面開始運作。
@@cwpeng-course 還是沒有ㄟ老師
彭彭老師 樓下的afrnk leu 就是呂錦川 只是我不小心用了不同的帳號進入了你的教學課程 對不起!
OK 的,沒什麼關係 :)
要不要用python挑戰電腦軟體設計丙級術科第一站的題目
好像挺有意思哦 XDDD
謝謝彭彭老師,請問能否open write, and close 其它副檔類型,如excel, word或有限制只能處理哪些副檔,感謝老師~~
都可以處理嘍。
只是你必須要先了解想要處理的檔案格式,內部資料是怎麼存放的,才有辦法正確的操作。
如果想要新增的檔案跟主檔案在同一個資料夾內,或主檔案找不到放在同一個資料夾的檔案,可以到python 的 extension settings 勾選 python.terminal.executeInFileDir ,或許會有幫助
感謝你的分享 :)
12:01 時一次在4行前面加#是怎麼按的,因為只聽到一聲,不像是先按CTL+ALT+I再按HOME,可以教一下嗎?,謝謝!
ctrl+/ 就可以了
@@曾柏瑜-h9k 真的太感謝!!
謝謝 @曾柏瑜 的回應呦 :))))
彭彭老師真的太Q了~~~~
>///////
獲益良多,謝謝彭彭老師。另請問老師有簡報檔可以提供嗎?我想印出後在上面筆記!
我這邊現在沒有提供簡報哦,不好意思 ~
老師您好,
我有一段程式碼如下
with open("data.txt", mode="w", encoding="utf-8") as file:
file.write("5
6
7
8")
sum=0
with open("data.txt", mode="r") as file:
print (file.read()
)
for line in file:
sum+=int(line)
print("sum=",sum)
==================================================
這樣得到的結果是這樣
5
6
7
8
sum= 0
sum算出來是0, 不是26
==================================================
我把print(file.read())
mark起來,
with open("data.txt", mode="w", encoding="utf-8") as file:
file.write("5
6
7
8")
sum=0
with open("data.txt", mode="r") as file:
#print(file.read())
for line in file:
sum+=int(line)
print("sum=",sum)
==================================================
這樣就可能正確算出sum為26
想請問老師為什麼一開始最上面那一段, 想要先print (file.read()), sum卻變成0
因為如果你那樣寫會變整篇讀取而不是一行一行
你用了for迴圈就不用再打那一行了
感謝 @Leo Wu 的回應 :)
自己有看PYTHON書完與14:57所寫的是一樣的,RUN也沒問題,但我想問的是data他是不是區域變數?為甚麼在全域變數PRINT還可以顯示?謝謝
在 with 描述底下的變數,還是全域的哦 ~~~~~
彭彭老师,麻烦问一下你,这里的json.load是什么意思,之前学到调用的时候似乎点后面应该是这个文件夹里面的定义的函数才对呀?
json 是内建的模组,json.load 可以把一个串流转换成字典列表的结构 ~
彭彭老師你好,想請教一下
我用with open('data.txt','r',encoding='ANSI') as file:
print(file.read())
就可以讀出全部的資料
換用with open('data.txt','r',encoding='ANSI') as file:
for line in file:
print(file.read())
就會少讀了第一行
怎麼會這樣呢?
for line in file: 會直接把第一行讀到變數 line 中,是用來一行一行讀取用的。
你的程式裡面就不會寫 file.read(),這是把剩下的讀出來。
如果一行一行讀取,會寫成如範例中的程式:
for line in file:
print(line)
彭彭老師你好,老師教學很棒~~學員想跟您請教:
1.json陣列型態多個姓名時候要改特定一個名子時候的語法是?
2.excel特定"行"跟"列"部分,語法該如何下呢?
謝謝您~~
1. 要看實際的結構,才能寫得出明確的程式哦。基本上要掌握列表和字典的操作。
2. 首先要讀取 excel 的檔案,可能要找套件來用,然後根據那個套件的指示來處理。
不好意思,這兩個問題都蠻細節的,留言中只能比較方向性的給你一些訊息嘍 ~
老師你好,感謝老師的教學!
但在18:30那段我有件事不太理解,就是使用with open('test.txt',mode='r') as file的這段
究竟file是什麼東西?
我用type(file)去檢查出來型態是_io.TextIOWrapper
所以他不是字串不是列表但可以使用在for迴圈裡
我會有這個疑惑的原因是我認為本來的檔案是字串"5
3",字串內共放了3個東西5、
、3
若是這個字串去針對每一項int化會出錯
但在教學這裡用for迴圈去針對file的每一項int化卻不會遇到
無法變數字的問題
而我另外測試
file=open('test.txt',mode='r')
line=file.read()
file.close
print(type(line))
得到的結果line是字串
所以用with open('test.txt',mode='r') as file
跟使用file.read()
得到的東西是不一樣的嗎
file 可以粗略的理解成是一個檔案物件,對於檔案物件做 for 迴圈會有一行一行讀取的效果,不會算進換行符號
。這個和你直接用字串去跑 for 迴圈是不同的。
file.read() 會一次得到整個文字檔案的內容,字串的型態如你所測試的結果,無論是哪種寫法都可以。
@@cwpeng-course 感謝老師的回覆!
希望老師可以教授 機械學習相關 收費也OK
謝謝你的建議,我會考慮看看呦 ~~~~~
老師,不好意思,我想請問一下
影片18:40的部分
for line in file
sum+=int(line)
_______________________
為什麼不能寫
for line in file
int(line)
sum+=line
个人理解:1.line在这里是作为字符串型的数据,int(line)是将line取成整数型的数据;2.如果按照你的写法,也是先将line取成整数型数据,但是你后面sum+=line这一块,实际上加的是字符串型的数据,而字符串型数据不能直接做算术运算;3.如果一定要分开写的话,可以增加一个中间变量:
for line in file:
a=int(line)
sum+=a
我是这样理解的,如果有不对的地方可以一起探讨XD
感謝 @牧野樵歌 的回應,很棒的分享 :)
老師您好,想發問,最後JSON檔案的修改有個小問題:
import json
with open("config.json",mode="r", encoding="utf-8") as file:
data = json.load(file)
data["name"] = "小明"
data["version"] = "1.5.3"
print(data) #驗證
with open("config.json",mode="w", encoding="utf-8") as file:
json.dump(data, file)
最後回去檢驗json檔,發現"name"所對應的參數沒有變小明,而是變成亂碼,結果如下:
{"name": "\u5c0f\u660e", "version": "1.5.3"}
想詢問是哪邊有做錯嗎??
請教老師按照您的code:該如何解決呢~
import json
with open('config.json') as file:
data=json.load(file)後出現以下
File "C:\Users\user\anaconda3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value
確認一下 config.json 檔案是否存在,是否有先儲存,裡面的格式有沒有寫對 ~
為甚麼把.py和.json放到資料夾內python就找不到json?但用絕對路徑可以
想請問老師,我在跑26:08那段程式時跑出了這樣的資訊,請問要怎麼辦?
runfile('C:/Users/user01/Desktop/遠/python/文字檔案的讀取和儲存.py', wdir='C:/Users/user01/Desktop/遠/python')
Traceback (most recent call last):
File "C:\Users\user01\Desktop\遠\python\文字檔案的讀取和儲存.py", line 40, in
data=json.load(file)
File "D:\spyder\lib\json\__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "D:\spyder\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "D:\spyder\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\spyder\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value
檔案內容本身不符合 JSON 的格式,所以要確認一下要讀取的檔案是否內容都有寫對哦 ~
請問當它每次寫入時都會覆蓋上次寫入的內容嗎? 該怎麼寫才能讓它別覆蓋上一次寫入的內容?
打開檔案的時候可以用附加模式,例如:
open("data.txt", mode="a")
原來如此 搞好久了 終於找到這邊有解答
請問若要面試外商刷leetcode,演算法、排序建議課程看哪幾章呢
我們的 Python 課程目前還沒有關於刷題,演算法的部份哦。基礎的話就資料、變數、運算符號、流程控制、函式這些。
老師我想請問一下
因為我最後的config.json跑不出來
之前也沒什麼接觸,所以完全不知道問題在哪
謝謝🙏
請問多行註解的快捷鍵是甚麼
ctrl+/
前幾部影片有提到喔
感謝回應 :)
請問老師:專講JSON的影片是指這個嗎?ua-cam.com/video/t7TSFImLa0U/v-deo.html
但這個好像是JAVASCRIPT裡的?能否附上網址在描述欄?
是這部沒錯,目前沒有 Python 的哦。
彭彭老師您好:
我按照您在影片裡的設定:
import json
with open("config.json", mode="r") as file:
data=json.load(file)
print(data)
print("name: ",data["name"])
print("version: ", data["version"])
--------------json檔案的設定如下-------------------
{
"name":"My name",
"version":"1.2.5"
}
結果run下去的結果如下:
{u'version': u'1.2.5', u'name': u'My name'}
('name: ', u'My name')
('version: ', u'1.2.5')
想請問老師為什麼印出來的時候沒有按照當初寫程式的順序(先印出"name":"My name"在印出"version":"1.2.5")?
還有為什麼印出來的時候前面會多一個u呢?是我的電腦設定出了什麼問題呢?
希望老師能解惑,謝謝!!!
順帶一提:如果我直接用python的IDLE跑這樣的程式就沒什麼問題,蠻好奇到底出了什麼問題~~~
字串前面出現 u 代表它被特別標示成 unicode 的字串。
那個其實沒有問題,只是 python 版本和電腦環境不同,會有不同的顯示方法。
謝謝彭彭老師專業的講解,想請問彭彭老師
with open("config.json",mode="r",encoding="utf-8")as file:
data=json.load(file)
print(type(file))
print(file)
Terminal跑出
想請問這裡的file檔案物件type跑出這樣的結果是甚麼意思呢?所以這裡的檔案物件file是指一種資料儲存型態嗎
你可以想成是某種 Python 內建的物件,名字叫做 TextIOWrapper,要仔細說的話是指文字輸出輸入用的物件,幫助我們讀取和寫入文字。在初學的情況下,把他理解成檔案物件會讓大家比較容易接受 ~
請問要怎樣一次把多行前面標示或取消#?
選取所有行數之後,按 ctrl+/ 就可以嘍 ~
在需要注释的多行前面输入三个''' 在多行结尾处再次输入三个'''
老師您好請問我執行這樣import json格式
import json
try:
with open("config.json", mode="r", encoding="utf-8") as j1:
data = json.loads(j1.read())
print(data)
except json.decoder.JSONDecodeError as e:
print("JSON 解析錯誤:", e)
卻跑出Expecting value: line 1 column 1 (char 0)這樣的錯誤要怎麼解決
有確認過config.json內的格式是正確的
這個錯誤本身就是在說讀取到的資料解讀失敗,所以要確認資料格式,或者檔案編碼是否為 UTF-8。或者看看是否用了 UTF-8 (BOM) 這個編碼,會在檔案前面加入看不見的字元。
想請教一下老師為什麼上面的讀取python檔案是寫file.read 但是到了讀取json檔案要改成.load嗎?
是因為語法上的不同還是因為功能不同,謝謝老師。
json.load() 其實內部就會幫我們去做 file.read() 的動作,然後再進一步解析 JSON 格式的資料。
file.read() 就是讀取成字串,不會把去解析 JSON 格式成字典或列表。
謝謝老師!
為何我打我照著7:42那時候打file卻沒有變成藍字?
其實是否上色不是關鍵,但你可以確認看看檔案名稱是否使用 py 當副檔名
19:11 老師是在開車嗎XD
XDDDDD
# 把檔案中的數字資料,一行又一行的讀取出來,並且做計算
file=open('data.txt', mode='w', encoding='utf-8') # 開啟
file.write('666
666')
file.close()
sum=0
file=open('data.txt', mode='r', encoding='utf-8')
a=file.read()
for a in file:
sum+=int(a)
print(sum)
程式碼沒有問題跳出來,可是就是沒有印出總和,只有印出sum=0
想請問彭彭老師這樣有什麼問題存在嗎?單純好奇不用Python實務法,用其他方法做的計算。
倒數第四行的 a=file.read() 是多出來的,會把檔案內容一次讀取完畢,後面的迴圈就讀不到任何東西哦 ~
@@cwpeng-course 謝謝彭彭老師!!😱
請問老師,最近學校有在教一種叫做"processing"的玩意,請問那是一種程式語言還是只是單純的一種編輯器??如果能解答,感激不盡!!
是一種程式語言和學習工具。
但只是為了方便學生學習程式邏輯而已,沒有太多實際上的應用就是。
老師好:我是一個國中的初學者,目前看老師的影片學習,但今天做的時候出現錯誤訊息,無法達到老師在影片9分鐘時做到的效果,請問該如何解決?錯誤訊息如下
PS D:\bob\程式設計\作品> & C:/Users/bobkw/AppData/Local/Programs/Python/Python39/python.exe d:/bob/程式設計/作品/第一部分/讀寫檔案.pyexe d:/bob/程式設計/作品/第一部分/讀寫檔案.py
Traceback (most recent call last):
File "d:\bob\程式設計\作品\第一部分\讀寫檔案.py", line 1, in
file=open("data.txt",mode="w")
FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'
PS D:\bob\程式設計\作品>
你的程式可以試試看改成 file=open("./data.txt", mode="w")
@@cwpeng-course 謝謝老師,解決了
老師你好, 請問在讀取json檔時若json檔中有用//做註解, 會導致程式錯誤, 該如何解決? 謝謝!
可以試試看使用更強大的套件 json5,可以用 pip install pyjson5 安裝,使用方法非常類似:
import json5
json5.load(file)
哪里是json的一段的教学视频?请问 彭彭老师,在哪里可以看到?
這裡哦 ua-cam.com/video/t7TSFImLa0U/v-deo.html
老師您好,請問寫入json格式前,是不是一定要先讀取?因為json的資料是字典形式所以不能直接改嗎?
你也可以直接創造一個字典,就寫入。只是這樣就和原本檔案中的資料無關,新資料會直接覆蓋舊的資料。
彭彭老師 請教一下
如果寫入字串 為同一列 file.write("5,5,8")
for line in file:
sum+=int(line)
print(sum)
則會失敗
要如何修改 才能 計算 同一列的總和呢?
這樣會一次讀取一整行包含 , 的內容,轉換成數字會失敗。
如果非得用逗號隔開,可以讀取一行之後,先用 split() 切割成列表,再去一個個抓取數字作轉換,類似以下這樣:
for line in file:
data=line.split(",")
for n in data:
print(n)
老師您好:
sum=0
with open("data.txt",mode="r", encoding="utf-8") as file:
for ns in file:
sum+=int(ns)
print(sum)
請教 sum+=int(ns) 與 sum==sum+int(ns) 的差別?
因計算出來不是8是0
謝謝!
sum+=int(ns) 和 sum=sum+int(ns) 是一樣的 ~~~
可以檢查看看你的 data.txt 檔案是否有儲存哦 ~~~
with open('test.json',mode='w',encoding='utf-8') as file:
json.dump('"Players":"[1,2,3]"',file)
它寫進去的時候自動在每個"前面加上\怎麽辦
因為你的程式是把一個字串,轉換成 JSON 格式寫出,所以會多出跳脫符號,也就是你說的 \ 這個。
常見的操作會是把字典和列表結構,轉換成 JSON,例如 json.dump({"Players":[1,2,3]},file)
老師您好,想跟您請教2個問題...
1. 我想試試使用r+模式寫寫看,所以把程式改成
import json
with open("config.json",mode="r+") as file:
data = json.load(file)
data["name"] = "New Name"
json.dump(data,file)
結果出現下面的錯誤
Traceback (most recent call last):
File "C:\Users\Python trainning\file.py", line 5, in
json.dump(data,file)
File "C:\Users\Programs\Python\Python310\lib\json\__init__.py", line 180, in dump
fp.write(chunk)
ValueError: I/O operation on closed file.
是不是使用r+模式時需要注意什麼呢?
2.後來我換成不使用最佳寫法,改成
import json
file = open("config.json",mode="r+")
data = json.load(file)
data["name"] = "New Name"
json.dump(data,file)
file.close()
但config.txt的結果不是覆寫,而是追加...
{"name": "Old Name", "version": "1.1.2"}{"name": "New Name", "version": "1.1.2"}
再麻煩老師了,謝謝~
P.S 老師的笑聲很可愛www
Hi K'Y
分享我的理解
因為使用 with open() as file 的關係,離開 with 的區塊 (從縮排判斷)檔案就被關閉了
所以第五行程式碼的 json.dum(data, file) 找不到預期被開啟 (open)的檔案,所以後來改用一般的開啟檔案方式就沒有這個問題
如果想要解決這個問題,將第四和第五行都做縮排,應該就可以解決問題了
@@namie20242001 您好,謝謝您的回應~
我依照您的說明,把第四跟第五行調整為縮排之後,真的就停止報錯了
只是..config.txt的結果跟前面提到的第二點一樣,不是覆寫,而是追加💦
(從{"name": "Old Name", "version": "1.1.2"} → {"name": "Old Name", "version": "1.1.2"}{"name": "New Name", "version": "1.1.2"})
不過我猜這個可能是r+模式的問題,非常感謝您幫忙整理了邏輯的思考方式,謝謝~~o(_ _)o
你使用 with 敘述,離開 with 區塊後,file 會被關閉,所以要把程式寫在 with 的區塊內:
import json
with open("config.json",mode="r+") as file:
data = json.load(file)
data["name"] = "New Name"
json.dump(data,file)
@@cwpeng-course 老師,我嘗試用你提供的寫法,結果還是追加而不是複寫,這是 r+ 的問題嗎?目前看來如果要複寫,就只能先讀取,然後修改變數後,再使用寫入,這樣比較保險但有點麻煩。老師有更好的做法嗎?謝謝!
請問老師 出現一下這段文字是出現什麽問題了?該如何解決呢?
Traceback (most recent call last):
File "file.py", line 6, in
file.wirte("測試中文
好棒棒")
AttributeError: '_io.TextIOWrapper' object has no attribute 'wirte'
write 寫錯嘍 ~
彭彭老師您好:
請問未指定資料型態列印出來的資料,怎麼會多一行空白,測試數字及字串皆有出現此情形,但指定資料型態後,印出來的資料就同檔案內的格式一樣,但不影響其計算結果,計算的結果皆為14,只有印出來的格式不一樣而已。
python版本3.10,懇請不吝教導,謝謝。
建立檔案:
with open("nums.txt", mode="w")as file:
file.write("5
3
6")
檔案內顯示的資料:
5
3
6
輸入: #印出資料
with open("nums.txt", mode="r")as nums:
for line in nums: # 使用for迴圈,將檔案的資料一行一行的讀取
print(line)
輸出:
5
3
6
輸入:
with open("nums.txt", mode="r")as nums:
for line in nums: # 使用for迴圈,將檔案的資料一行一行的讀取
print(int(line))
輸出:
5
3
6
讀取出來的 line 本身帶有一個換行符號,若刻意去轉換成數字,這個換行符號就消失了。
@@cwpeng-course 原來如此,謝謝老師。
我想請問老師,我這一段有打錯嗎?
因為一直跑不出data.txt
還是是其他部分的錯誤?感謝彭彭老師!!!
file=open("data.txt", mode="w", encoding="utf-8")
file.write("hello file")
file.close()
with open("data.txt", mode="w", encoding="utf-8") as file:
file.write("Hello File
Second Line")
sum=0
with open("data.txt",mode="r", encoding="utf-8")as file:
for line in file:
sum=int(line)
print(sum)
import json
with open("config.json",mode="r")as file:
data=json.load(file)
print(data)
data["name"]="new name"
with open("config.json",mode="w")as file:
json.dump(data,file)
要看看你的錯誤訊息嘍 ~~~~
老師你好,有個小地方一直搞不懂>< ("17:47"的地方)
想請問為什麼 x 要加 int 不能直接sum+=x ? x不是本來讀出來就是數字? 謝謝老師
sum=0
with open("data.txt",mode="r",encoding="utf-8") as file:
for x in file:
sum+=int(x)
print(sum)
x 從文字檔中讀出來時是字串哦。
雖然在檔案中看不出來,但從文字檔中讀出來的東西,就算看起來是數字,也是先以字串的形式取得。
請問彭彭老師:
檔案的寫入 換行的指令影片中是用
如果習慣用""" """ 在未來會不會有影響呢?
畢竟還在初學 剛開始養成好的習慣蠻重要的
不會呦,其實都可以的,沒有這麼嚴重 :)
老師您好,想請問以下問題
有看到影片說明不要使用file.read()去計算總和,但仍想釐清以下疑問
1.為什麼以()read程式碼執行印出結果不會包含空行
with open("0719-3.txt", mode = "w") as file:
file.write("99
100
101")
with open("0719-3.txt", mode = "r", encoding="utf-8") as file:
total = 0
w = file.read()
print(w)
結果印出-->
99
100
101
且若以下列方式印出卻會印出 ”錯誤訊息“
with open("0719-3.txt", mode = "r", encoding="utf-8") as file:
total = 0
w = file.read()
total += int(w)
print(total)
結果印出-->invalid literal for int() with base 10: '99
100
101'
2.為什麼以for in loop執行會印出 ”兩行空行“ ?
with open("0719-3.txt", mode = "w") as file:
file.write("99
100
101")
with open("0719-3.txt", mode = "r", encoding = "utf-8") as file:
for i in file:
print(i)
結果印出->
99
100
101
3.我理解您說明計算要使用for in 但仍想知道檔案讀取內容的差異和for in loop明明讀出空行卻不會跑出invalid literal for int() with base 10: '99
100
101' 之錯誤訊息?
再麻煩您的說明,感謝!
1. 看起來已經有包含空白行了,就直接顯示出換行的效果。試圖轉換成整數時,因為文字中包含換行符號,所以失敗。
2. print() 本身會自己多印出一個換行符號。
3. int("9
") 可以被接受,但 int("9
9") 不行,這只是 int() 這個轉換函式的特性。
謝謝彭彭老師的分享,看完影片後我想問一個問題!!
我嘗試用讀取普通txt檔案的方式去讀取Json的檔案
最後得到的結果稍微不太一樣:
txt: {"name": "New Name", "version": "1.2.5"}
Json: {'name': 'New Name', 'version': '1.2.5'}
我print之後發現只差了單引號跟雙引號而已,這樣代表讀取出來之後上者是以字串型別輸出,下者是以Json的型別輸出嗎?
JSON 格式其實也是一種純文字檔案,用普通讀取的方式會印出文字檔案原貌。
用 JSON 去解讀,則會得到字典和列表型態的資料,印出來的內容是套件處理過的,就不一定是原來的長相,但不影響背後的結構和概念。
老師您好,請問用spyder會有不能執行的程式碼嗎,因為我在spyder上照老師的打with open=(.......)那邊,結果都無法讀出來,說是錯誤的語法,但我確定是一樣的,想問老師是不是程式的差異問題,謝謝
語法應該是一樣的,所以要仔細看看錯誤訊息和程式碼,比較能進一步判斷錯誤的源頭是什麼 ~
老師您好
請問如何寫點兩下打開檔案的程式?
例如:我點兩下打開D:\test.xlsx的檔案,如何用python自動化?
這個不是一件很簡單的事情,可能無法在留言中說詳細,但你可以去查查看 PyAutoGUI 這個模組,應該幫得上你的忙。
請問老師:
import json #這邊為甚麼不能用import config.json ??
with open('config.json',mode='r') as file: #打開json檔
data=file.read() #這邊為何不能照先前這樣讀取檔案? 而必須data=json.load(file) ??否則他說string indices must be integers??
但是如果只寫
with open('config.json',mode='r') as file: #打開json檔
data=file.read() #讀取後為字典型態
print(data)#data是一個字典資料
是可以印出
{
"name":"my name",
"version":"1.2.5"
}
的字典資料的
但是後面加上
print('name:',data["name"])
print('version',data["version"])
這兩行就印不出最後兩行的結果了??
我們需要 import json,然後使用 json.load() 來讀取 json 的檔案資料哦。
不好意思 問個
我已經老師打的完全一樣了(9:00)為甚麼還是出現C:\Users\USER\AppData\Local\Programs\Python\Python38-32\python.exe: can't open file 'file.py': [Errno 2] No such file or directory
這是檔案路徑的問題,請確定有先用 VS Code 打開資料夾,終端機的顯示路徑應該在 file.py 所在的資料夾底下 ~
@@cwpeng-course我發現我在python training 的資料夾裡再開一個子資料夾,在子資料夾裡的檔案都無法正常運作,請問是這個原因嗎? (感謝老師的回覆~~)