Python 如何从字符串生成唯一的数据
我有这样的数据。字符串用逗号分隔Python 如何从字符串生成唯一的数据,python,Python,我有这样的数据。字符串用逗号分隔 "India1,India2,myIndia " "Where,Here,Here " "Here,Where,India,uyete" "AFD,TTT" 我想做的是把它们放在一列中(一列在另一列下),这样就会变成这样 India1 India2 myIndia Where Here Here Here Where India uyete AFD TTT 然后,我保留了导致这种情况的独特因素 India1 India2 myIndia Wher
"India1,India2,myIndia "
"Where,Here,Here "
"Here,Where,India,uyete"
"AFD,TTT"
我想做的是把它们放在一列中(一列在另一列下),这样就会变成这样
India1
India2
myIndia
Where
Here
Here
Here
Where
India
uyete
AFD
TTT
然后,我保留了导致这种情况的独特因素
India1
India2
myIndia
Where
Here
India
uyete
AFD
TTT
因此,我有一个.txt格式的第一个数据,我尝试使用numpy来实现这一点
这是我的密码
#!/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 )
我得到了TypeError:需要一个字符缓冲区对象
我已经搜索过了,发现了几个类似的帖子
如果我添加了out.seek(0)
我仍然会得到相同的错误
但是,通过将其更改为out.write(str(item2))
感谢我没有收到任何错误,但是,输出显示了这一点
(数组(['/path到文件/test.txt'],
数据类型='| S29'),数组([0]))
下面是我尝试使用的解决方案
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 )
没有错误,但数据也不会生成为什么使用numpy???我不确定是否要使用与输入和输出相同的文件
#!/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)
听起来你可能有一个csv文件。你不需要numpy,附带的电池就是你所需要的
import csv
data = []
with open('test.txt') as f:
reader = csv.reader(f)
for row in reader:
data.extend(row)
您可以。扩展
列表,而不是。向列表追加
。基本上就像说
for thing in row:
data.append(thing)
不过,这仍然会留下副本。如果您不关心订单,您可以将其设置为集合
并调用更新()
,而不是扩展:
data = set()
with open('test.txt') as f:
reader = csv.reader(f)
for row in reader:
data.extend(row)
现在一切都是独一无二的。但是,如果你关心顺序,你就必须把事情过滤下来:
unique_data = []
for thing in data:
if thing not in unique_data:
unique_data.append(thing)
如果test.txt
文件包含以下文本:
"India1,India2,myIndia "
"Where,Here,Here "
"Here,Where,India,uyete"
"AFD,TTT"
而不是
India1,India2,myIndia
Where,Here,Here
Here,Where,India,uyete
AFD,TTT
那你就没有一个csv了。您可以修复生成csv的内容,或者手动删除引号,或者动态修复
def remove_quotes(file):
for line in file:
yield line.strip('"\n')
reader = csv.reader(remove_quotes(f))
下面的
stack.txt
包含以下内容:
"India1,India2,myIndia"
"Where,Here,Here"
"Here,Where,India,uyete"
"AFD,TTT"
给你:
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)
这就产生了:
['India1', 'India2', 'myIndia', 'Where', 'Here', 'India', 'uyete', 'AFD', 'TTT']
India1
India2
myIndia
Where
Here
India
uyete
AFD
TTT
编辑:要获得所需的输出,只需按所需格式打印列表:
print("\n".join(final))
从输出的角度来看,这相当于:
for x in final:
print(x)
这就产生了:
['India1', 'India2', 'myIndia', 'Where', 'Here', 'India', 'uyete', 'AFD', 'TTT']
India1
India2
myIndia
Where
Here
India
uyete
AFD
TTT
您只需从文件中读取、拆分并将所有内容放在一个集合中。
file\u name.split(',')
。您希望它做什么?请参阅文档部分中的unique\u everseed
。@cricket\u 007我希望用comma
@nik拆分字符串。为什么要拆分文件名?维护顺序重要吗?在提供答案之前,您可能需要对问题进行澄清。没有明确要求的所有内容对我来说都不重要。类似于来自集合导入订单的;tempData=OrderedDict.fromkeys(tempData).keys()应该保留顺序。@not_a_机器人这是什么?tempData
@JDB顺序对我很重要。看看我上面的问题。我展示了输出的外观您的文件是否包含“foo,bar,thing,qux”\n“下一行,goes,here”\n
?如果是这样的话,你会想修复你的csv或包装文件。是的,我在这里分享一个例子,顺便说一句,引号包括在文件中,显然。。。OP提出了多个问题,包括这个data@nik那么你肯定想要remove\u quotes
包装器。@Wayne Werner最后一个remove\u quotes放在哪里?
我的意思是将remove\u quotes与你给出的第一个解决方案合并,如何将读者传递给它?我已经喜欢你的答案了!只有一件事,是否可以将输出作为一列,而不在另一列下放置任何、
和“
?如果是这样,我接受并喜欢您的答案final
是一个列表
对象,因此它有“
和,
字符分隔其字符串元素。将更新。