python的读取一个文件夹下的同一文件的指定数据

#读取二进制文件的数据并写入csv文件中

import struct
import numpy as np
import pandas as pd
import csv
import pandas as pd
import os
import glob
import codecs
import pandas as pd
import os
import glob
import codecs
import csv
from collections import Counter

循环读取一个路径下的同一种文件

path = r"F:/zhengwangwork/data"
csv_files = glob.glob(os.path.join(path, "*.udat"))

file_name =[]

for f in csv_files:
    #path=f.split("\\")[-1]
    path=f.split("/")[-1]
    file_name.append(path)


    f=open(f,'rb')
    lines=f.read()
    size=int(len(lines)/168)

168为C++结构体的字节数

size为要循环的次数
    f.seek(0)
    data=[]
    data1=[]
    #tmp = [0]*7
    dat = []
    #list=[]
    for i in range(size):
        tmp = [0]*7                       
        #深拷贝dict(字典)赋给list的是一个位置,
        #对于第一种代码,dictionary定义在循环外,每次使用list.append(dictionary)赋给 
        # list的都是相同的位置,而在同一位置的dict的值已经改变了,所以list取到的之前位置的值改变了,
        # 表现出后面数据覆盖前面数据的表象。dict定义在循环内,相当于每一次循环生成一个dictionary,
        # 占用不同的位置存储值,所以可以赋给list不同元素不同的位置,获得不同的值
        #Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
        #         1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 
        #         2. copy.deepcopy 深拷贝 拷贝对象及其子对象


        buffer=f.read(168)
        #df=struct.unpack('41i4b',buffer)
        #df=struct.unpack('42i',buffer)
        df=struct.unpack('41ic3c',buffer)

解析结构体内的元素类型
       
        df=list(df)
        #df=list(df)
        #print (df)
        a = ord (df[42])

ord函数是将单个字符转化为int整型
        tmp[0] = a 
        tmp[1] = df[40]
        tmp[2] = df[3]
        tmp[3] = df[4] - df[3] 
        tmp[4] = df[36]
        tmp[5] = df[37]
        b=ord(df[41])
        tmp[6] = b

以上采用下标索引的方法来读取自己想要得到数据
       # a = df[4]
       # b = df[3]
        #tmp[3] = df[4] - df[3]
       # tmp[41] = ord(df[41])
       # tmp[42] = ord(df[42])
       # print(tmp)
        data.append(tmp)
        #print(data)     
 #       print (df)
 #   print(data)
   

    
    ar=np.array(data)

    #数组的计算
    dic={"isTopRail":ar[:,0],
         "rec_code":ar[:,1],
         "startTestID":ar[:,2],
         "distance":ar[:,3],
         "Minimum depth":ar[:,4],
         "Maximum depth":ar[:,5],
         "serverity":ar[:,6]
        }
    name2=[file_name]
    test=pd.DataFrame(data=dic)

生成csv 的数据的函数赋值,再通过以下的函数来生成csv文件的地址和编码格式。
   
    test.to_csv("F:/zwwork/testcsv/6.csv",encoding="utf-8")

#typedef struct UltraRcg_Section
#{
# int ids;
# int startTestID;              
# int endTestID;                 
# int avgTestId;                  

# int totalEchos;                
# int gatesExist[GATES_NUM];            
# int gatesList;               

# int max_depth;                
# int min_depth;                  
# int average_depth;             

# float length;

# int rec_code;
# char severity;
# bool isTopRail;

#}UltrRcgSection;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值