看板 Python 關於我們 聯絡資訊
前輩們好 我又來求救了 現在我想要讀一個CSV檔 然後在讀取他一行裡面的第四個值 然後利用這第四個值的大小(數字)去讀取後面的欄位 比如說 他第一行是這樣子 1,2,3,4,5,6,7,8,9 我想要讀到4 然後可以取出 5,6,7,8 這四個數字的值 我在IDLE底下有試過 >>> a=1,2,3,4,5,6,7,8,9 >>> b= a[4:a[3]+a[3]] >>> print b (5,6,7,8) 可是當我使用在readline()的時候 卻報錯了 >>> f=open(r"c:\dd.csv","rb") >>> a=f.readline() >>> b=a[3:a[3]+a[3]] Traceback (most recent call last): File "C:\Users\ALPHA\Desktop\work\ww.py", line 6, in <module> b=a[3:a[3]+a[3]] TypeError: slice indices must be integers or None or have an __index__ method 接著我又嘗試將他append到 另外一個 list底下 >>> d=[] >>> d.append(a) >>> d[3] Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> d[3] IndexError: list index out of range 結果還是沒有辦法 想要請問一下前輩們 我有哪邊的想法出錯了嗎?? 關於一開始的問題 還有其他方法可解嗎? -- ◢███◣ 真是太令我興奮了,教授BOY~~ █████ █▉◥█◤ 覆蓋一張空白考卷在桌上 結束這學期 ██ ◤ \ ◤◤╲╰┤ ㊣ justlasai -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.231.19.87 ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/30 20:05)
ya790206:1. readline 的資料是字串,而非整數。你在IDLE下的 1 是 03/30 20:29
ya790206:數字 1。 第二個問題,d 只有一個元素而已。所以沒有d[3] 03/30 20:30
所以前輩的意思是 我的D是append一個整數a這一個字串? 我也有試過直接用 int(a) 可是出來的東西亂七八糟的 跟我原始的數字差很多(連+ -都變成一項) 請問大大 如果我這個讀取檔案問題 該怎麼解決為佳呢? ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/30 20:33)
ya790206:把字串切成只含整數的字串list,再把list的字串轉整數 03/30 20:40
grtfor:http://tinyurl.com/cjy9rm3 雖然跟問題無關,但你要不要用 03/30 20:44
grtfor:python 內建的csv 來做處理 03/30 20:45
MAGICXX:因為我後面的資料不一定都是整數 會有一些小數點 03/30 20:45
MAGICXX:所以可以用float之類的嗎? 03/30 20:48
MAGICXX:感謝G大 我研究一夏~@@ 03/30 20:48
太感謝g前輩以及y前輩了!! 配合csv.reader以及int終於可以達到我想要的功效了~!!! ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/30 21:30)
ya790206:有個小問題,你說你的資料有小數點,怎麼還用int? 03/30 21:34
import csv f=open(r"c:\dd.csv","rb") c=csv.reader(f,delimiter=',') d=c.next() a=int(d[3]) b=d[4:a+a+1] print b 因為第四位一定是整數 所以我在切完之後 直接轉int給底下再切的時候吃 這樣子就可以達到 切那個數值 然後讀後面的數字下來 剛剛也有試過利用 >>> b[1]+b[2] '0.11' 他是可以互相加起來的 所以符合我想要的東西這樣~@@ ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/30 21:45)
ya790206:我不知道你的data。你能跑就好 03/30 21:58
mars90226:我比較好奇你是csv檔,為什麼要用rb開? 03/30 23:33
MAGICXX:抱歉 我只有用過RB開檔案而已....囧 03/30 23:41
抱歉 又有點小問題了... 他迴圈跑到最後 會出現 Traceback (most recent call last): File "C:\Users\ALPHA\Desktop\work\ww.py", line 7, in <module> d=c.next() StopIteration 請問這個有辦法讓它不要出現嗎? 不然程式不管怎麼跑都會出現..... 然後後面的處理就卡住了.... ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/31 13:06)
suhorng:就是已經跑到結尾的意思 你原本的迴圈可以用個 for 取代掉 03/31 13:30
suhorng:或是自己 try: except: 抓起來 03/31 13:30
我這邊已經是用FOR迴圈了 for i in c 這樣 ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/31 14:53)
suhorng:hmm, 若你已經 for i in c, 那為什麼還有 d=c.next()? 03/31 15:50
我有試過for i in d 不過他就會把那行裡面的東西從頭丟到底這樣 就是給他丟到D之後 我下面還會對他有動作~@@ ※ 編輯: MAGICXX 來自: 36.231.19.87 (03/31 16:05)