实际工作中,碰到这么个问题:有个软件跑在linux系统上,其中用到一个数据库是csv格式的,但要向这个数据库添加600行新的数据,数据源同样是一个csv格式的文件。

有了目标,开始干活。首先想到的是,把linux系统上的数据表给down下来,用excel打开。想法很丰满,现实很骨感。悲催的是,excel的表单保存成csv格式的文件后,原来添加的改动全部没了,而且里面的数据发生了很大的变动,有一列全部变成一样的值了。

看来用excel保存为csv格式的文件是行不通的。

无奈之下,想到了python。所幸python早已有支持csv读写的模块,用起来也甚是方便。

python程序如下:

importcsv

fObj=open('test.csv','r')

csvReader=csv.reader(fObj)

sheet=[]for row incsvReader:

sheet.append(row)

fObj.close

writeFileObj=open('result.csv','a')

write=csv.writer(writeFileObj)for row in sheet[40003:]:

writer.writerow(row)

writeFileObj.close()

这里写文件的格式要用a,表示追加写入,会保留文件内容,将新数据添加到文件末尾,如果使用的是'w'方式,则会清除原有的文件内容。

好了,很快得到我们想要的数据表,上传到linux设备,在linux打开一看,新加的数据每一行都多了一个^M,看起来甚是碍眼,网上百度了一下,发现:

1 1. 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r')2 2. 在linux下的文本文件的每一行结尾,只有一个回车('\n');3 3. 在Mac下的文本文件的每一行结尾,只有一个换行('\r');

因此,在linux打开在windows下编辑过的文本,会在行末显示^M

^M在Linux中对应的输入是ctrl+V,ctrl+M。

解决办法也很多样化,个人试过比较好用的方法是用文本替代的方法。使用vim打开csv文件,输入Esc+:,在输入状态输入:

%s/^M$//g

解释:% 指匹配整个文件,s 是置换的意思,^M 注意要用 Ctrl + V Ctrl + M 来输入,M 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换;

问题得到解决。以为到此结束了,结果程序一运行,新加的数据无法读取,读取出现乱码。数据出现了一堆问号。突然想到,是否应该以二进制的方式来读取文件会比较合理,然后也以二进制的方式写入csv文件。百度了一下,以普通方式读写文件和以二进制方式读写文件的区别如下:

读文件 进行读文件操作时,直到读到文档结束符(EOF)才算读取到文件最后,Python会认为字节\x1A(26)转换成的字符为文档结束符(EOF),

故使用'r'进行读取二进制文件时,可能会出现文档读取不全的现象。

示例:

二进制文件中存在如下从低位向高位排列的数据:7F32 1A 2F 3D 2C 12 2E 76如果使用'r'进行读取,则读到第三个字节,即认为文件结束。

如果使用'rb'按照二进制位进行读取的,不会将读取的字节转换成字符,从而避免了上面的错误。

解决方案:

二进制文件就用二进制方法读取'rb'总结:

使用'r'的时候,如果碰到'0x1A',就视为文件结束,就是EOF。使用'rb'则不存在这个问题

于是把代码中的文件打开方式由'r'变成了'rb‘,写入同样由'a’变成了'ab',运行python,结果报错:

iterator should return strings, not bytes (did you open the file in text mode?)

借助百度,网上的解释是python3不支持以二进制方式读取文件,而python2不会有这个问题,幸好本机同时装了python3和python2两个版本,于是换成python2.7,问题得到解决。

重新把新的数据上传到linux设备上,软件可以正常运行。

一个小小的csv文件处理,竟然遇到这么多波折,最后不屈不挠地解决了,也是不容易。谨以此文MARK一下。

python安装csv出错_python处理csv文件问题解决贴相关推荐

  1. python安装pandas出错_python pandas 安装失败原因揭晓_python pandas 教程

    从源码安装numpy是需要编译的,如果不太精通此道,对于32位的python 2.7,可以在sourceforge上面下载再安装,或者从lfd那里下载再安装,这个地方提供了32位与64位的whl安装文 ...

  2. python writerow 返回值_python – .writerow()csv返回一个数字而不是写行

    我正在使用Python 3测试一些非常简单的代码.出于某种原因,下面的代码生成一个空输出,而不是写一行 import csv output = open('hello world.csv', 'w', ...

  3. python csv使用_Python基于csv模块实现读取与写入csv数据的方法

    本文实例讲述了Python基于csv模块实现读取与写入csv数据的方法.分享给大家供大家参考,具体如下: 通过csv模块可以轻松读取格式为csv的文件,而且csv模块是python内置的,不需要下载就 ...

  4. python安装os模块_python的os模块(ipython,文件,目录,权限,管理)

    什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,这时就离不了o ...

  5. python 批量下载依赖_python通过txt文件批量安装依赖包的实现步骤

    python通过txt文件批量安装依赖包的实现步骤 如果要用某个开源框架,需要安装多个依赖包可以如下操作: 如依赖文件形式如下(可以不要版本号): txt文件名为requirements.txt,内容 ...

  6. python删除重复文字_python如何删除文件中重复的字段

    本文实例为大家分享了python如何删除文件中重复字段的具体代码,供大家参考,具体内容如下 原文件内容放在list中,新文件内容按行查找,如果没有出现在list中则写入第三个文件中. import c ...

  7. excel数据导入python后不对齐_Python处理Excel文件的实用姿势

    真正的勇士,敢于直面银行卡上的余额,敢于正视磅秤上的数字. 表格数据是最常见的数据类型,Excel是日常办公中最常接触的文件. 上一章提过Python可以通过openpyxl模块处理Excel文件. ...

  8. python安装gdal包_python安装gdal的两种方法

    1.不用手动下载文件,直接执行以下命令即可 conda install gdal 2.首先,下载gdal的whl文件  链接, 官网下载比较慢,GDAL-2.2.4-cp27-cp27m-win_am ...

  9. python安装系统要求_python需要什么系统 | window重装系统教程

    python的spyder怎么打开,或者具体的安装教程 1.spyder 打https://pypi.python.org/pypi/spyder 下载里面最新的源码zip包,在解压后,cmd里cd到 ...

最新文章

  1. Javascript作用域原理---预编译
  2. jquery实现点击a链接,跳转之后,该a链接处显示背景色
  3. HTML5-响应式的实现方式-弹性布局浅谈
  4. 几个有用的eclipse插件安装地址
  5. LVS(2)——针对于LVS的增删改方法
  6. CVPR 2019 | 腾讯AI Lab解读六大前沿方向及33篇入选论文
  7. [文档].Altera - Avalon接口规范
  8. 16位浮点 c语言,C语言中的16位浮点乘法
  9. 信息学奥赛一本通 1172:求10000以内n的阶乘 | OpenJudge NOI 1.6 14:求10000以内n的阶乘
  10. jsp点击文字改变颜色_这样给图片添加上文字、诗词、歌词,超吸睛
  11. CMFCPropertyGridCtrl 的简单教程
  12. VisualVM初次使用BTrace功能方法步骤
  13. linux 多线程学习
  14. Linux udhcpc/udhcpd 移植
  15. linux 中cp是什么意思,linux系统cp是什么
  16. 计算机工程与工艺截稿,中国计算机学会第二十届计算机工程与工艺学术年会
  17. mybatis处理多对一映射关系3- 分步查询和延迟加载
  18. 一纸学习康奈尔笔记法
  19. word操作:单独调整英文字体
  20. Shell脚本自动源码包安装LA/NMP架构详解(赠软件包+脚本)

热门文章

  1. 一题多解(六)—— 一个数二进制形式 1 的个数
  2. 地震与地球的内部构成
  3. 深度学习基础(十)—— 稀疏编码(二)
  4. 机器学习基础(六十)—— 凸优化
  5. Python基础——numpy.ndarray一维数组与多维数组
  6. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变
  7. JAVA处理模型的步骤,java-处理模型中条件字段的最佳方法
  8. python课程开课吧怎么样-律所:我们更想招这样的人……
  9. python简单代码-用Python代码实现5种最好的、简单的数据可视化!
  10. python干嘛用的-学 Python 都用来干嘛的?