当前位置: 首页>移动开发>正文

python读取10行csv文件 python读取整个文件csv

        近日接到老婆大人的作业,想自动处理一批文件。刚好我自己公司的同事也有类似的需求。想到当初学PYTHON时的一句流行话“人生苦短,我用python。”抱着试试的想法,我开始了这个项目,其中也参看了各位大神的文章,收益良多,在此不一一感谢,我把我经历的一些事和程序与大家分享。

        本人双专业,一个是机械自动化,一个是计算机科学技术。现在工作是搞机械设计,业余搞搞编程和电子。编写的程序不一定入得了大神的法眼,还请不要拍砖。

         老婆对这个程序的大概要求如下:

1.一批文件,要求自动合并,一次性读取。

2.自动删除表头前5行,表尾。

3.文件含有“50”的特殊行删除。

4.表格删除空白处,并自动对齐。

5.表格旋转90度。

          我分析了一下要求,一批文件,批处理应该不难,我查看了各个文件,行数和列数格式都一样,我可以先从单个文件处理入手。读取文件我就直接使用了


c = open("NT1891.CSV","rt",encoding="gbk") #以rt的方式打开csv文件 read = csv.reader(c)


          接下来,我使用循环语句,先建立一个空表,再用for语句依次读取,再读取整个表的长度a。

遍历整个文件如下:


data = [] for line in read: data.append(line) #得到列表 a = len(data)


           考虑删除表头前5行,由于是固定位置,固定行数,我就偷了一下懒,直接while循环,删除前5行


i = 4 while i >= 0: data.pop(i) i = i-1 b = len(data) #去表头的列表长度


           参数b是留着自己参考的,其中有一个大坑,data.pop.后面再说

           考虑删除表尾,直接while循环


while (b-1) >= 617: data.pop(b-1) b = b-1


           617这个数字是计算得来的,比较笨,当时一直没想明白那个坑,所以不得以,先让程序运行起来。

          如何删除含有“50”数字的行,一直研究了好几个晚上。

第一种想法是FOR循环, if判断然后再删除行。

第二种方法是使用 data.pop来删除,一开始试了几行,可行,没问题。但是问题来了,我一使用FOR循环,程序就报错,超出范围,试了好久都不成功

第三种方法是先筛选含有“50"数字的行,保存进列表,然后新表和老表取差,即删除含有”50”数字的行


for d in range(0, len(data)):
   if data[d][4] == '50':      #注意数值类型
      b_list.append(data[d])
new_list = []                  #定义新列表为后面两列表相差
for item in data:
   if item not in b_list:
      new_list.append(item)
for item in b_list:
   if item not in data:
      new_list.append(item)


            事实证明第三种方法高效,程序简洁。

            最后把表格旋转90度,这就必须提到NUMPY

            代码如下:


a_list = np.array(new_list).T    #list类型转为元组类型
#a_list = np.mat(new_list)       #这个不知道为什么旋转不了
c_list = list(map(list, zip(*a_list[::1])))             #旋转90度
d_list = np.array(c_list)
print(d_list)


            主要功能程序如下:


#coding: utf-8
import csv
import numpy as np
i = 4
c = open("NT1891.CSV","rt",encoding="gbk") #以rt的方式打开csv文件
read = csv.reader(c)
data = []
for line in read:
   data.append(line)              #得到列表
a = len(data)                     #原列表的长度
print(a)
while i >= 0:
   data.pop(i)
   i = i-1
b = len(data)                   #去表头的列表长度
print(b)
while (b-1) >= 617:
   data.pop(b-1)
   b = b-1
print(len(data))               #去表尾的列表长度
b_list = []                     #定义列表筛选第4列含有50的行
for d in range(0, len(data)):
   if data[d][4] == '50':      #注意数值类型
      b_list.append(data[d])
new_list = []                  #定义新列表为后面两列表相差
for item in data:
   if item not in b_list:
      new_list.append(item)
for item in b_list:
   if item not in data:
      new_list.append(item)
a_list = np.array(new_list).T    #list类型转为元组类型
#a_list = np.mat(new_list)       #这个不知道为什么旋转不了
c_list = list(map(list, zip(*a_list[::1])))             #旋转90度
d_list = np.array(c_list)
print(d_list)
c.close()


    运行结果如下:符合预期

python读取10行csv文件 python读取整个文件csv,python读取10行csv文件 python读取整个文件csv_csv,第1张


https://www.xamrdz.com/mobile/4y61963929.html

相关文章: