2016-12-21 3 views
-1

Ich habe solche Daten. Die Strings sind durch ein Komma getrennt.Wie mache ich eine eindeutige Daten von Strings

"India1,India2,myIndia  " 
"Where,Here,Here " 
"Here,Where,India,uyete" 
"AFD,TTT" 

Was ich versuche zu tun, sie alle in einer Spalte zu setzen (man untereinander) So wird es wie werden diese

India1 
India2 
myIndia 
Where 
Here 
Here 
Here 
Where 
India 
uyete 
AFD 
TTT 

Dann habe ich die Einzigen bleiben, die dazu führen,

India1 
India2 
myIndia 
Where 
Here 
India 
uyete 
AFD 
TTT 

So habe ich die ersten Daten in einem .txtformat und ich habe versucht numpyfor diese

Th zu verwenden mein Code ist

#!/usr/bin/python 
import numpy as np 

# give a name to my data 
file_name = 'path to my data/test.txt' 
# set my output 
with open ('output.txt' , 'w') as out: 
    # read all the lines 
    for n , line in enumerate (open (file_name).readlines ()): 
     # split each stirg from another one by a comma 
     item1 = file_name.split (',') 
    myList = ','.join (map (str , item1)) 
    item2 = np.unique (myList , return_inverse=True) 
    # save the data into out 
    out.write (item2) 

Ich war immer TypeError: expected a character buffer object

Ich habe es gesucht und ich fand mehrere Posten wie TypeError: expected a character buffer object - while trying to save integer to textfile

und wenn ich out.seek (0) habe ich immer noch die gleichen Fehler

aber durch Ändern auf out.write (str(item2)) dank TypeError: expected a character buffer object bekomme ich keinen Fehler, aber die Ausgabe zeigt diese

(array(['/path to the file/test.txt'], dtype='|S29'), array([0]))

Nachstehend finden Sie eine soltuion gegeben, die ich

import csv 

data = [] 
def remove_quotes(file): 
    for line in file: 
     yield line.strip ('"\n') 
with open ('test.txt') as f: 
    reader = csv.reader (remove_quotes (f)) 
    for row in reader: 
     data.extend (row) 

kein Fehler zu verwenden versucht, aber auch data nicht

+1

Sie einfach aus der Datei, Split lesen und setze alles in einen Satz. – vks

+1

'file_name.split (',')'. Was hast du davon erwartet? –

+0

Siehe ** 'unique_everseen' ** im Abschnitt [recipes] (https://docs.python.org/2/library/itertools.html#recipes) von [**' itertools' **] (https: //docs.python.org/2/library/itertools.html) Dokumentation. –

Antwort

1

stack.txt unten enthält diese:

"India1,India2,myIndia" 
"Where,Here,Here" 
"Here,Where,India,uyete" 
"AFD,TTT" 

Hier gehen Sie:

from collections import OrderedDict 

with open("stack.txt", "r") as f: 
    # read your data in from the gist site and strip off any new-line characters 
    data = [eval(line.strip()) for line in f.readlines()] 
    # get individual words into a list 
    individual_elements = [word for row in data for word in row.split(",")] 
    # remove duplicates and preserve order 
    uniques = OrderedDict.fromkeys(individual_elements) 
    # convert from OrderedDict object to plain list 
    final = [word for word in uniques] 

print(final) 

Welche Daraus ergibt sich:

['India1', 'India2', 'myIndia', 'Where', 'Here', 'India', 'uyete', 'AFD', 'TTT'] 

Edit: Um Ihre gewünschte Ausgabe, nur Drucke die Liste in th e gewünschtes Format:

print("\n".join(final)) 

Welche entspricht, von einem Ausgang Standpunkt dazu:

for x in final: 
    print(x) 

Was ergibt dies:

India1 
India2 
myIndia 
Where 
Here 
India 
uyete 
AFD 
TTT 
+0

Ich mag deine Antwort schon! nur eine Sache, wäre es möglich, die Ausgabe als eine Spalte ohne "," und "" untereinander zu haben? Wenn ja, akzeptiere ich und mag Ihre Antwort – nik

+0

'final' ist ein' list' Objekt, daher hat es '' '' '' '' 'Zeichen trennen seine String-Elemente. Werde Dich auf dem Laufenden halten. – blacksite

-1

erzeugt Warum numpy mit ??? und ich bin nicht sicher, ob Sie die gleiche Datei als Eingabe und Ausgabe

#!/usr/bin/env python 


# give a name to my data 
inputData = """India1,India2,myIndia 
Where,Here,Here 
Here,Where,India,uyete 
AFD,TTT""" 

# if you want to read the data from a file 
#inputData = open(fileName, 'r').readlines() 

outputData = "" 
tempData = list() 
for line in inputData.split("\n"): 
    lineStripped = line.strip() 
    lineSplit = lineStripped.split(',') 
    lineElementsStripped = [element.strip() for element in lineSplit] 
    tempData.extend(lineElementsStripped) 
tempData = set(tempData) 
outputData = "\n".join(tempData) 
print("\nInputdata: \n%s" % inputData) 
print("\nOutputdata: \n%s" % outputData) 
+2

Ist die Reihenfolge wichtig? Sie sollten wahrscheinlich um eine Klärung der Frage bitten, bevor Sie eine Antwort geben. –

+0

Alles was nicht explizit angefordert wird, ist mir nicht wichtig. – JDB

+0

So etwas wie 'von Sammlungen importieren OrderedDict; tempData = OrderedDict.fromkeys (tempData) .keys() 'sollte die Reihenfolge beibehalten. – blacksite

-1

Es klingt wie Sie wahrscheinlich eine CSV-Datei haben verwenden möchten. Sie brauchen dafür keine Nummern, die mitgelieferten Batterien sind alles was Sie brauchen.

import csv 

data = [] 
with open('test.txt') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     data.extend(row) 

Sie können .extend Listen statt .append zu ihnen. Es ist im Grunde wie

for thing in row: 
    data.append(thing) 

sagen, dass nach wie vor die Duplikate verlassen, though. Wenn Sie nicht über Auftrag kümmern können Sie es einfach machen einen set und rufen .update() statt erweitern:

data = set() 
with open('test.txt') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     data.extend(row) 

Und jetzt ist alles einzigartig.Aber wenn Sie, um Pflege werden Sie Dinge filtern müssen ein wenig nach unten:

unique_data = [] 
for thing in data: 
    if thing not in unique_data: 
     unique_data.append(thing) 

Wenn Ihr test.txt Datei diesen Text enthält:

"India1,India2,myIndia  " 
"Where,Here,Here " 
"Here,Where,India,uyete" 
"AFD,TTT" 

Und nicht

India1,India2,myIndia  
Where,Here,Here 
Here,Where,India,uyete 
AFD,TTT 

Dann sind Sie habe nicht ganz einen CSV. Sie können entweder beheben, was Ihre CSV generiert oder manuell entfernen Sie die Anführungszeichen oder nur beheben Sie es im laufenden Betrieb.

def remove_quotes(file): 
    for line in file: 
     yield line.strip('"\n') 

reader = csv.reader(remove_quotes(f)) 
+0

Enthält Ihre Datei buchstäblich "foo, bar, ding, quux" \ n "nächste Zeile, geht, hier" \ n "? Wenn dies der Fall ist, müssen Sie entweder Ihren CSV reparieren oder die Datei umbrechen. –

+0

ja ich teile ein Beispiel hier https://gist.github.com/anonymous/63b1a70e913c1453b0de9d7027b5973a – nik

+0

BTW, die Zitate sind in der Datei enthalten, anscheinend ... Es gab mehrere Fragen von OP mit dieser Daten –

Verwandte Themen