J'essaie d'extraire des données d'un grand fichier CSV dans le format suivant, en supposant que 'x' est une donnée sous forme de texte ou d'entier. Chaque groupe a un identifiant unique, mais n'a pas toujours le même nombre de lignes par regroupement ou couleur. Les données sont séparées de la couleur par une virgule.Python pour extraire et trier les données d'un fichier
id, x
red, x
green, x
blue, x
black, x
id, x
yellow, x
green,
blue, x
black, x
id, x
red, x
green, x
blue, x
black, x
id, x
red, x
green, x
blue, x
id, x
red, x
green, x
blue, x
black, x
Je souhaite réorganiser les données dans un format de colonne. L'ID doit être la première colonne et toutes les données séparées par une virgule. Mon but est de lire le premier mot de la ligne et de le placer dans la colonne appropriée.
line 0 - ID - red - green - blue - yellow - black
line 1 - x, x, x, , x,
line 2 - , x, x, x, x,
line 3 - x, x, x, , x,
line 4 - x, x, x, , ,
line 5 - x, x, x, , x,
C'est ce que je cherchais ...
readfile = open("db-short.txt", "r")
datafilelines = readfile.readlines()
writefile = open("sample.csv", "w")
temp_data_list = ["",]*7
td_index = 0
for line_with_return in datafilelines:
line = line_with_return.replace('\n','')
if not line == '':
if not (line.startswith("ID") or
line.startswith("RED") or
line.startswith("GREEN") or
line.startswith("BLUE") or
line.startswith("YELLOW") or
line.startswith("BLACK")):
temp_data_list[td_index] = line
td_index += 1
temp_data_list[6] = line
if (line.startswith("BLACK") or line.startswith("BLACK")):
temp_data_list[5] = line
if (line.startswith("YELLOW") or line.startswith("YELLOW")):
temp_data_list[4] = line
if (line.startswith("BLUE") or line.startswith("BLUE")):
temp_data_list[3] = line
if (line.startswith("GREEN") or line.startswith("GREEN")):
temp_data_list[2] = line
if (line.startswith("RED") or line.startswith("RED")):
temp_data_list[1] = line
if (line.startswith("ID") or line.find("ID") > 0):
temp_data_list[0] = line
if line == '':
temp_data_str = ""
for temp_data in temp_data_list:
temp_data_str += temp_data + ","
temp_data_str = temp_data_str[0:-1] + "\n"
writefile.write(temp_data_str)
temp_data_list = ["",]*7
td_index = 0
if temp_data_list[0]:
temp_data_str = ""
for temp_data in temp_data_list:
temp_data_str += temp_data + ","
temp_data_str = temp_data_str[0:-1] + "\n"
writefile.write(temp_data_str)
readfile.close()
writefile.close()
Qu'avez-vous essayé jusqu'à présent? Le module 'csv' de la librairie standard est probablement un bon point de départ. –
Je sais que vous avez dit que vous vouliez une solution python mais avez-vous considéré R? Il a été construit pour ces sortes de tâches – Stedy
je confesss Je suis nouveau à la programmation et j'essayé d'utiliser cette ... http://ubuntuforums.org/showpost.php?p=6159649&postcount=4 Mais je continuais obtenir cette erreur. IndexError: indice d'affectation de liste hors de portée Maintenant, je l'ai appris est à cause de la façon dont les données sont formatées je vais jeter un oeil à R –