J'ai un tas de fichiers texte séparés par des tabulations que j'ai besoin de traiter. Je dois obtenir les en-têtes pour toutes les valeurs uniques dans la colonne 'étude'.Python: Récupère les en-têtes de colonne pour les données de certaines colonnes
Par exemple: Si mes données sont comme:
csv1:
name study id race
aaa cb10 123 asian
bbb cb10 128
ccc vj97 864
CSV2:
name study vaccine
aaa cb10
bbb cb10 abc
ccc vj97 poi
à partir de plusieurs fichiers, ma sortie doit être les en-têtes de colonnes pour tous les études dans la colonne «étude»:
cb10- name,study,id,race,vaccine
vj97- name,study,id,vaccine
J'ai le code ci-dessous:
import os
import sys
import glob, ntpath, csv
def get_header_for_tsv_file(tsv_data):
if not os.path.exists("Results"):
os.makedirs("Results")
#output_path = os.path.join ("Results",study + ".csv")
result = []
search_for = study
header = tsv_data.next()
#output_file = open (output_path, "ab")
#for row in tsv_data:
if data["study"] in search_for:
print data
def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)
def get_tsv_list():
tsv_list = glob.glob(os.getcwd()+"\*.txt")
return tsv_list
def get_tsv_data(tsv_name):
file_name = os.path.join(tsv_name + ".txt")
if not os.path.exists(file_name):
print "Error: Couldn't find file:", file_name
sys.exit(-1)
input_data = open (file_name)
input_data = csv.DictReader(input_data, delimiter = "\t")
return input_data
def run(tsv_name):
tsv_data = get_tsv_data(tsv_name)
header_data = get_header_for_tsv_file(tsv_data)
if __name__ == "__main__":
tsv_list = get_tsv_list()
filename = [path_leaf(path) for path in tsv_list]
for index in range(0, len(filename)):
tsv_name_list = filename[index]
tsv_name = os.path.splitext(os.path.basename(tsv_name_list))[0]
tsv_data = get_tsv_data(tsv_name)
for data in tsv_data:
study = data["study"]
run(tsv_name)
Je cherche à le faire en utilisant package csv par défaut au lieu de pandas géants, si possible. Y a-t-il un moyen de le faire?
Jetez un oeil un pandas géants - un outil très puissant pour faire un tel traitement –