我目前正在尝试查找多个(〜580).csv文件之间的相似性。我要这样做的方式如下:
文件列表(已完成步骤4)如下:
[['00000000B847912E,,1,1,1,1,1,1,1,1,1,1,ALG0,,1,1,1,1,1,1,1,1,1,1,<>Z*,,0,1,AUT-ANALYSE,0,0,1,25.10.2017, 09:38:42,0,0,1,3,1,1,1,1,1,1,1,1,0,0', ''], ['00000000B75B90E6,...
我陷入了第5步。知道如何完成该步骤吗?
当前代码如下:
from os import listdir, chdir
path = (r'C:\...')
chdir(path)
files = [f for f in listdir(path)]
class Dataset():
def __init__(self, files):
self.files = files
def openfiles(self):
self.filelist = []
self.headers = []
for file in self.files:
if file.lower().endswith('.txt'):
with open(file, 'r') as x:
x = x.read()
x = x.split('\n')
#y = [line.split(',') for line in x]
header = x[0]
data = x[1:]
self.filelist.append(data)
self.headers.append(header)
return self.filelist
def uniquevalues(self):
last = object()
self.uniquefilelist = []
self.openfiles()
for file in self.filelist:
for line in file:
for value in line:
if value == last:
continue
self.uniquefilelist.append(item)
last = item
return self.uniquefilelist
编辑所需的输出:如果我使用前面显示的列表,则所需的输出将如下所示:
[['00000000B847912E,1,ALG0,<>Z*,0,AUT-ANALYSE,25.10.2017, 09:38:42,3,''], ['00000000B75B90E6,...
edit 2:编辑帖子。在openfiles()中将y注释掉,因为它正在为文件中的每一行创建一个新列表。我认为这不会帮助我取得理想的结果
edit 3回答Novak:我把它放在这样的代码中:
def uniquevalues(self):
self.uniquelist = []
self.openfiles()
for file in self.filelist:
file = list(set(file))
self.uniquelist.append(file)
return self.uniquelist
输出仍然不是唯一的+在每个列表的开头都添加了''
[['','00000000B847912E,,1,1,1,1,1,1,1,1,1,1,ALG0,,1,1,1,1,1,1,1,1,1,1,<>Z*,,0,1,AUT-ANALYSE,0,0,1,25.10.2017, 09:38:42,0,0,1,3,1,1,1,1,1,1,1,1,0,0'], ['', '00000000B75B90EB,...
编辑4:我编写的函数:
def notonestring(self):
self.openfiles()
self.useddata = []
for i in self.filelist:
l = i.split(',')
self.useddata.append(l)
return self.useddata
输入是第4步中的列表
编辑5:代码:
for i in filelist:
for j in range(len(i)):
l = i[j].split(',')
useddata.append(l)
输出(对于文件2):print(useddata[1])
['00000000B75B90E7', '2', '12.04.2017 08:48:00', '01.01.1754 10:48:26', 'LFR\\H.SIEPEL', '156', '62001', '1', '14', '15', 'Field1=0(ABO)', '1', 'ABO', '0', '', '0', '', '1', '0', 'Lefier']
一行。应该是7。它现在也从第二行而不是第一行开始。
答案 0 :(得分:0)
您可以编写如下内容:
step_5_list = []
for i in step_4_list:
for j in i:
l = list(set(i))
step_5_list.append(l)
之所以起作用,是因为set是仅保留唯一元素的数据结构。因此,您将列表变成集合,它只保留唯一元素,然后将其返回列表并追加到结果列表中。
此外,我看到每个子列表都以'
开始和结束。这意味着您有一个包含一个字符串的列表。为了获得列表,您应该执行以下操作:
res = []
for i in step_4_sublist:
l = i.split(',')
res.append(l)
在此之后,您应该做我之前写的部分。
希望这对您有所帮助。如果仍然不清楚,请在评论中询问mi:)