请大神帮忙调一下程序 DEBUG没走通 请反馈源代码非常感谢 代码如下:
#载入需要的库
import os
import pandas as pd
import glob
#excel转化为csv
def xlsx_to_csv_pd():
c=os.getcwd()
excel_list1=glob.glob('*.xls')
excel_list2=glob.glob('*.xlsx')
for a in excel_list1:
data_xls = pd.read_excel(a, index_col=0)
outfile=c+"/"+a
data_xls.to_csv(outfile, encoding='utf-8')
for b in excel_list2:
data_xls = pd.read_excel(b, index_col=0)
outfile=c+"/"+b
data_xls.to_csv(outfile, encoding='utf-8')
def hebing():
csv_list = glob.glob('*.csv') # 查看同文件夹下的csv文件数
print(u'共发现%s个CSV文件' % len(csv_list))
print(u'正在处理............')
for i in csv_list: # 循环读取同文件夹下的csv文件
fr = open(i, 'r').read()
with open('result.csv', 'rb') as f: # 将结果保存为result.csv
f.write(fr)
print(u'合并完毕!')
def quchong(file):
df = pd.read_csv(file, header=0)
datalist = df.drop_duplicates()
datalist.to_csv(file)
#运行函数
if name == '__main__':
print("转化完成!!!" )
hebing()
quchong("result.csv")
print("已完成数据文件合并清单所处位置:"+str(file))
之前有人问类似的问题,要C#的,我用C#写了一个给他,结果那人拿了程序就跑了,再也不采纳
https://download.csdn.net/download/caozhy/10585160
我上传上来,是0分资源,白送给你。要改python的,采纳本回答可以帮你改。
具体还是要看你的excel格式
我的程序仅仅作为参考
#! /usr/bin/env python
#coding=utf-8
#writer:parming Email:ming5536@163.com
from pyExcelerator import *
import sys
import glob
class batxls2csv:
def __init__(self):
pass
def savecsv1(self,arg):
matrixgolb = []
for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding
matrix = [[]]
for row_idx, col_idx in sorted(values.keys()):
#print row_idx,col_idx
#print matrix
v = values[(row_idx, col_idx)]
if isinstance(v, unicode):
v = v.encode('cp866', 'backslashreplace')
else:
v = str(v)
last_row, last_col = len(matrix), len(matrix[-1])
#下一行修改过
while last_row <=row_idx:
matrix.extend([[]])
last_row = len(matrix)
while last_col < col_idx:
matrix[-1].extend([''])
last_col = len(matrix[-1])
matrix[-1].extend([v])
for row in matrix:
csv_row = ','.join(row)
matrixgolb.append(csv_row)
return matrixgolb
print matrixgolb
def savecsv2(self):
filelist = glob.glob("*.xls")
for filenam in filelist:
matrixgolb=self.savecsv1(filenam)
namecsv=filenam[:-4]+'.csv'
file_object = open(namecsv, 'w+')
for item in matrixgolb:
file_object.write(item)
file_object.write('\n')
file_object.close( )
if __name__ == "__main__":
test=batxls2csv()
test.savecsv2()
导入所需的包
import os
import pandas as pd
import glob
1
2
3
合并多个csv文件
csv_list = glob.glob('*.csv') #查看同文件夹下的csv文件数
print(u'共发现%s个CSV文件'% len(csv_list))
print(u'正在处理............')
for i in csv_list: #循环读取同文件夹下的csv文件
fr = open(i,'rb').read()
with open('result.csv','ab') as f: #将结果保存为result.csv
f.write(fr)
print(u'合并完毕!')
1
2
3
4
5
6
7
8
共发现9个CSV文件
正在处理............
合并完毕!
1
2
3
去重函数
这个函数将重复的内容去掉,主要是去表头。
df = pd.read_csv("result.csv",header=0)
1
df.info()
1
RangeIndex: 659867 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode 659867 non-null object
code 659867 non-null object
name 659867 non-null object
dtypes: object(3)
memory usage: 15.1+ MB
1
2
3
4
5
6
7
8
IsDuplicated = df.duplicated()
1
True in IsDuplicated
1
True
1
这说明了这个DataFrame格式的数据含有重复项。
DataFrame.drop_duplicates函数的使用
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
1
subset : column label or sequence of labels, optional
用来指定特定的列,默认所有列
keep : {‘first’, ‘last’, False}, default ‘first’
删除重复项并保留第一次出现的项
inplace : boolean, default False
是直接在原来数据上修改还是保留一个副本
datalist = df.drop_duplicates(keep = False)
1
datalist.info()
1
Int64Index: 659859 entries, 0 to 659866
Data columns (total 3 columns):
UrbanRuralCode 659859 non-null object
code 659859 non-null object
name 659859 non-null object
dtypes: object(3)
memory usage: 20.1+ MB
1
2
3
4
5
6
7
8
排序函数
datalist_sorted = datalist.sort_values(by = ['code']) #按1列进行升序排序
1
结果写入csv文件
datalist_sorted.to_csv("village_all.csv", sep = ',', header = True,index = False)
1
问题
Python读取文件问题
错误信息
"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence"
1
解决方案
fr = open(i,'r').read() 改为 fr = open(i,'rb').read()
with open('result.csv','a') as f: 改为 with open('result.csv','ab') as f:
1
2
重复值问题
这里我合并了9个csv文件,检查最后合并结果发现,里面还有一个列名。这是因为9个为文件,其中8个的列名被认为是DataFrame的值,第1个的列名依旧为列名,然后再去重的过程中,8个相同值被保留了1个,所以这会导致最后的csv文件多了一个列名。
解决方案
IsDuplicated = df.duplicated() 改为 IsDuplicated = df.duplicated(keep = False) #重复数据全部去除
在将多个csv文件拼接到一起的时候,可以用Python通过pandas包的read_csv和to_csv两个方法来完成。
这里不采用pandas.merge()来进行csv的拼接,而只是通过简单的文件的读取和附加方式的写入来完成拼接。
1 import pandas as pd
2 for inputfile in os.listdir(inputfile_dir):
3 pd.read_csv(inputfile, header=None) #header=None表示原始文件数据没有列索引,这样的话read_csv会自动加上列索引
4 pd.to_csv(outputfile, mode='a', index=False, header=False) #header=0表示不保留列名,index=False表示不保留行索引,mode='a'表示附加方式写入,文件原有内容不会被清除
首先给定两个CSV文件的内容
1.CSV
2.CSV
将2.CSV文件里的数据追加到1.CSV后面
直接敲写Python代码
with open('1.csv','ab') as f:
f.write(open('2.csv','rb').read())#将2.csv内容追加到1.csv的后面
在将多个csv文件拼接到一起的时候,可以用Python通过pandas包的read_csv和to_csv两个方法来完成。
这里不采用pandas.merge()来进行csv的拼接,而只是通过简单的文件的读取和附加方式的写入来完成拼接。
1 import pandas as pd
2 for inputfile in os.listdir(inputfile_dir):
3 pd.read_csv(inputfile, header=None) #header=None表示原始文件数据没有列索引,这样的话read_csv会自动加上列索引
4 pd.to_csv(outputfile, mode='a', index=False, header=False) #header=0表示不保留列名,index=False表示不保留行索引,mode='a'表示附加方式写入,文件原有内容不会被清除