项目遇到的小问题以及解决方法

项目前中期的工作已经完成,因此写这篇博文的目的在于总结项目中有关python操作的一些小问题和小细节,并给出相应的解决方法。

问题一: _csv.Error: field larger than field limit (131072)

原因:当用python读取csv格式文件,excel表数据很大,行数超过131072行,发生情况偶尔,非必然事件。

解决方法:

import sys


'''
解决报错:_csv.Error: field larger than field limit (131072)
'''
maxInt = sys.maxsize
decrement = True

while decrement:
    # decrease the maxInt value by factor 10
    # as long as the OverflowError occurs.

    decrement = False
    try:
        csv.field_size_limit(maxInt)
    except OverflowError:
        maxInt = int(maxInt / 10)
        decrement = True

问题二:处理表格时,程序遍历会出现匹配不上的问题。

原因:有可能excel内容读取出来的时候,单元格里有空格。

解决方法:

for r1 in rows1[1:]:
    t1 = r1[0].strip()

用 .strip( )就可以去掉空格

问题三:当出现 物品A/物品B/物品C/物品D,假如想要将元素分割,去掉“/”变成物品A/物品B/物品C/物品D,可以不用正则匹配。

解决方法:用 .split 方法 ,linestrlist = linestr.split("/")  

问题四:excel表的模糊匹配问题

例子:假如要得到表中所有10kv的项目,用excel/postgre数据库进行数据删选10kv,只是模糊匹配,比如说用10kv字段删选的话,会找出110kv的项目;但是又不能删除110kv,因为有些110kv又包含10kv字段(例:110kv变电站转10kV变电站)

解决方法:

利用excel进行操作

1.  点击“自动删选”——在“项目名称”下拉栏——“内容筛选”输入10kv, 会找出包含110kv的项目。

2.  点击“查找——替换”,输入110kv,替换内容为ttt(可自行设置),也就是用ttt替换110kv。

3.  如1,筛选10kv的项目,放到另外一张新表

4.  如2,将ttt替换成110kv

这个用数据库写sql语句的话很复杂,效果也不见得好,但是用这种替代的思想,往往会有奇效。

问题五:csv格式文件编码问题,表格打开后出现1.2E+111,然后恢复不了原来的数据。

例子:

 Csv格式会将“物资编码”列的数字,如010012000395,变成10012000395,即前面的“0”自动去掉,从12位变成11位,不便于后续的操作。(csv格式会自动隐藏,也可以恢复,自行百度);同时如110012000395,前面是“1”的数字,变成csv文件后,数字显示不出来,会出现1.1E+111这种情况。

解决方法:

1.在“物资编码”的数字前加一个“1”,如010012000395,变成了1010012000395

这样可以有效避免数字位数减少的问题。

需要注意的地方,在变成csv格式后,无论是手动变还是python写出来,都要将物资编码这一栏的单元格格式设置成数值。如图所示:



小技巧

1.在程序遍历匹配的时候出现数字(字符串)匹配不上的问题,可以将两张表的数字(字符串)都强制转换,然后比较。

2.python的一个函数:string.join()

Python中有join()和os.path.join()两个函数,具体作用如下:
    join():    连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
    os.path.join():  将多个路径组合后返回

1、join()函数

语法:  'sep'.join(seq)

参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

返回值:返回一个以分隔符sep连接各个元素后生成的字符串

3.需要注意的地方:1.慎用excel的去除重复项 2.保存excel文件时优先选择“另存为”,因为当excel进行某些操作后,可能会自动保存为Unicode文本格式,如果不留神点了“保存”,再打开就会出现格式错乱的情况,特别是对格式要求为csv的。






猜你喜欢

转载自blog.csdn.net/qq_38150441/article/details/79630090