qq_43178462 2023-02-21 09:23 采纳率: 37.5%
浏览 85
已结题

python批量处理文件和数据


path ='.../data0ape'
def get_filelist(dir):
    Filelist = []
    for home, dirs, files in os.walk(path):
        for filename in files:
            # 文件名列表,包含完整路径
            Filelist.append(os.path.join(home, filename))
            # # 文件名列表,只包含文件名
            # Filelist.append( filename)
    return Filelist
Filelist = get_filelist(dir)
print(len( Filelist))
for file in  Filelist :
        #print(file)
        txtfile = open(file, "r")
        lineStr1 = txtfile.readline()
        word = lineStr1[13:].split(" ")[0]
        #df
        files = pd.read_csv(file,sep='\s+',header = None, skiprows= 8,keep_default_na=False)
        data = pd.DataFrame(files)
        data['time'] = data[1].apply(lambda x:x[0:8])
        data_new = data
        data_new[1] = data_new['time']
        data_new = data_new.groupby(by = 'time').mean()
        data_new = data_new.reset_index(drop=False)
        df1 = data_new.iloc[:,:2 ]
        dftest = pd.DataFrame({'time': pd.date_range(start= df1['time'][0], end=df1['time'].iloc[-1], freq='S')})
        df1['time'] = df1['time'].astype('str')
        start = df1['time'][0]
        end = df1['time'][(len(df1) - 1)]
        time = pd.date_range(start=start, end=end, freq='S')
        str1 = time.strftime("%Y-%m-%d %H:%M:%S").to_list()
        time2 = [x.split(' ')[1] for x in str1]
        df2 = pd.DataFrame({'time': time2})
        df3 = pd.merge(df1, df2, on='time', how="right")
        df4 = df3.drop('time', axis = 1)
        #add id
        df4.loc[-1] = word
        df4.index = df4.index + 1
        df4 = df4.sort_index()

本人想使用上述代码块实现————从某文件夹子文件夹的.txt提取要素作为数据文件,在运行时“lineStr1 = txtfile.readline()”报错,'utf-8' codec can't decode byte 0x88 in position 296: invalid start byte,修改‘r’为‘encoding='ISO-8859-1'后,files = pd.read_csv(file,sep='\s+',header = None, skiprows= 8,keep_default_na=False)又报错Error tokenizing data. C error: Expected 3 fields in line 10, saw 9。源代码在单步调试时是可以运行的,最后我想实现所有从file提取的df整合到一个df文件里面。

  • 写回答

8条回答 默认 最新

  • MarkHan_ 2023-02-21 09:30
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ

    关于第一个问题,'utf-8' codec can't decode byte 0x88 in position 296: invalid start byte,这个错误可能是因为文本文件的编码格式不是utf-8,可以尝试使用其他编码格式打开文件,比如'ISO-8859-1',使用如下代码:

    txtfile = open(file, "r", encoding='ISO-8859-1')
    

    关于第二个问题,Error tokenizing data. C error: Expected 3 fields in line 10, saw 9,这个错误是因为在读取txt文件时,某一行的字段数目与指定的分隔符sep='\s+'不符合。可以尝试使用pandas的error_bad_lines参数跳过错误行,如下:

    files = pd.read_csv(file, sep='\s+', header=None, skiprows=8, keep_default_na=False, error_bad_lines=False)
    

    最后关于整合到一个df文件里面,可以先定义一个空的DataFrame,然后在每次循环读取到的文件中,将df4追加到这个空DataFrame中,如下:

    result_df = pd.DataFrame()  # 定义一个空的DataFrame用于存放结果
    for file in Filelist:
        # 读取文件、处理数据
        ...
        # 将df4追加到结果DataFrame中
        result_df = result_df.append(df4, ignore_index=True)
    # 保存结果到文件
    result_df.to_csv("result.csv", index=False)
    

    最后将结果保存到result.csv文件中。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月21日
  • 修改了问题 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?