批量提取csv文件某一列,并保持每个csv文件保存为与原文件名对应

新手上路,请多包涵

题目描述

存在同一文件夹下的csv文件,需要批量提取第四列,然后看第五列重复的话只保留其中一个。由于csv文件是空格分隔的,有时候还会把所有列读成一列

题目来源及自己的思路

单个读取文件是可以读取的,然后批量放进去就提取不出来。报错

相关代码

import os
import pandas as pd
import csv
import codecs
import glob

全局变量,文件读取路径

read_path = ""

处理结果文件输出路径

output_path = ""

获取文件路径

def get_file_path():

read_path = r"E:\python代码\split"
output_path = r"E:\python代码\pra"
return read_path,output_path

读取文件名称和内容

def deal_files():

# 获取read_path下的所有文件名称(顺序读取的)
files = os.listdir(read_path)
for file_name in files:
    # 读取单个文件内容
    dfdata = pd.read_csv(read_path+"\\"+file_name,sep='\s+',header=None,names=['a','b','c','d','e','f','g','h','i','j'])
    #处理单个文件(调用方法)
    finish_dfdata = get_deal_file(dfdata)
    # 输出结果到指定路径下
    finish_dfdata.to_csv(output_path + "\\" + file_name+'.csv', index=False)
    return dfdata,finish_dfdata
print("文件处理完毕")

# 定义字典

aa_codes = {

'ALA':'A','CYS':'C','ASP':'D','GLU':'E',
'PHE':'F','GLY':'G','HIS':'H','LYS':'K',
'ILE':'I','LEU':'L','MET':'M','ASN':'N',
'PRO':'P','GLN':'Q','ARG':'R','SER':'S',
'THR':'T','VAL':'V','TYR':'Y','TRP':'W'}

def get_deal_file(dfdata):

with open(dfdata, 'r') as csvfile:

    flag=[]
    final=[]
    i=0
for i in csvfile:
    flag = i.split('\\s+')[0]
    # flag.append(i[3])
    # flag.append(i[4])
    return flag

a=flag.drop_duplicates(subset='e', keep='first', inplace=False)#删除重复的e列只保留第一个
b=a.iloc[:,3]
final.append[b]
# final=pd.DataFrame(columns='amino',data=b)
        # flag.append(b)
i=i+1
return final

with open(output_path, "w") as f:

writer = csv.writer(f)

主函数

if __name__=="__main__":

# 获取文件输入和输出路径
read_path,output_path = get_file_path()
# 开始处理文件,并输出处理文件结果
deal_files()

你期待的结果是什么?实际看到的错误信息又是什么?

期待将每个文件中的第四列(在保证第五列不重复情况下)存入csv文件,文件名和之前的文件名保持一致

阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题