作者MAGICXX (逢甲阿法)
看板Python
标题[问题] readline()如何切?
时间Sat Mar 30 20:04:55 2013
前辈们好 我又来求救了
现在我想要读一个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)
1F:→ ya790206:1. readline 的资料是字串,而非整数。你在IDLE下的 1 是 03/30 20:29
2F:→ ya790206:数字 1。 第二个问题,d 只有一个元素而已。所以没有d[3] 03/30 20:30
所以前辈的意思是
我的D是append一个整数a这一个字串?
我也有试过直接用
int(a)
可是出来的东西乱七八糟的 跟我原始的数字差很多(连+ -都变成一项)
请问大大 如果我这个读取档案问题 该怎麽解决为佳呢?
※ 编辑: MAGICXX 来自: 36.231.19.87 (03/30 20:33)
3F:→ ya790206:把字串切成只含整数的字串list,再把list的字串转整数 03/30 20:40
5F:→ grtfor:python 内建的csv 来做处理 03/30 20:45
6F:→ MAGICXX:因为我後面的资料不一定都是整数 会有一些小数点 03/30 20:45
7F:→ MAGICXX:所以可以用float之类的吗? 03/30 20:48
8F:→ MAGICXX:感谢G大 我研究一夏~@@ 03/30 20:48
太感谢g前辈以及y前辈了!!
配合csv.reader以及int终於可以达到我想要的功效了~!!!
※ 编辑: MAGICXX 来自: 36.231.19.87 (03/30 21:30)
9F:→ 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)
10F:→ ya790206:我不知道你的data。你能跑就好 03/30 21:58
11F:推 mars90226:我比较好奇你是csv档,为什麽要用rb开? 03/30 23:33
12F:→ 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)
13F:→ suhorng:就是已经跑到结尾的意思 你原本的回圈可以用个 for 取代掉 03/31 13:30
14F:→ suhorng:或是自己 try: except: 抓起来 03/31 13:30
我这边已经是用FOR回圈了
for i in c
这样
※ 编辑: MAGICXX 来自: 36.231.19.87 (03/31 14:53)
15F:→ 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)