读取CSV数据时删除特定字符串

时间:2014-03-21 08:51:00

标签: python csv

我是python中的新手,我正在编写代码来读取CSV文件中的数据。

数据如下所示:

10944750,13451,0,6��4��   

10944750,21110,0,6��7��

10944750,1131,0,7��23��

10944750,8689,0,5��2��

最后一列代表日期,例如第一行:6月4日。但其中有两个中国宪章。所以我必须解码并得到月和日。

我的代码:

import codecs
raw_file=open('Documents/t_alibaba_data.csv')
result=open('Documents/result.txt','w')
for line in raw_file.readlines():
    entry=line.split(",")
    deco=entry[3].decode("gbk")
    month=deco[0]
    if len(deco)==5:
        day=int(deco[2])*10+int(deco[3])
    else:
        day=int(deco[2])
    result.write(",".join(entry[:3])+","+str(month)+","+str(day)+"\n")
        print result

我的IDE中没有警报或错误,但我的结果中也没有任何内容。

1 个答案:

答案 0 :(得分:0)

首先:你没有告诉Python你想要从文件中读取。 (将'r'添加到raw_file.open()。

并且,在运行程序时,在解码最后一列之后,元素nr 3(deco [2])是中文符号,而不是当天的nr。

我稍稍调整了你的程序,当它看起来像这样时,它起作用(至少如果我理解你的问题):

import codecs
raw_file=open('Documents/t_alibaba_data.csv', 'r')
result=open('Documents/result.txt','w')
for line in raw_file.readlines():
    entry=line.split(",")
    deco=entry[3].decode("gbk").strip()
    month=deco[0]
    if len(deco)==5:
        day=int(deco[2])*10+int(deco[3])
    else:
        day=int(deco[4])
    result.write(",".join(entry[:3])+","+str(month)+","+str(day)+"\n")
result.close()

此外,len(deco)永远不会是5,而if测试将永远不会成立。长度总是长于5.尝试打印出不同装饰的长度,看看实际长度是多少。 如果在字符串的末尾有空格,那么在deco上使用strip函数可能是明智的。当我打印你给出的装饰长度时,长度为8或9,具体取决于正在处理的线。