Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python调试-“;不是一份清单”;_Python_Debugging - Fatal编程技术网

Python调试-“;不是一份清单”;

Python调试-“;不是一份清单”;,python,debugging,Python,Debugging,我编写了以下代码: def data_preprocessing_tree(data): data = data.split(';') # enumerate data = list(filter(lambda x: not ('..' in x or '//' in x), data)) # clean (noise removal) data = list(map(lambda x: x + 'txt' if x[len(x) - 1] == '.' else x,

我编写了以下代码:

def data_preprocessing_tree(data):
    data = data.split(';') # enumerate
    data = list(filter(lambda x: not ('..' in x or '//' in x), data)) # clean (noise removal)
    data = list(map(lambda x: x + 'txt' if x[len(x) - 1] == '.' else x, data)) # complete missing values

    data_new = list(map(lambda x: x.rsplit('/', 1) if '.' in x.rsplit('/', 1)[1] else x, data)) # not file?
    # data_file = list(map(lambda x: x[len(x) - 1] if '.' in x[len(x) - 1] else '', data_new))
    # data_file = list(filter(lambda x: '.' in x, data_file))
    data_dir = list(map(lambda x: x[:len(x) - 1] if '.' in x[len(x) - 1] else x, data_new)) # if last is file

    # print('{0}\n{1}\n{2}\n\n'.format(data_new, data_file, data_dir))
    print('{0}\n{1}\n\n'.format(data_new, data_dir))

    # data_dir = list(map(lambda x: x[0] if type(x) == list else x, data_dir))
    data_dir = list(map(lambda x: [x] if type(x) != list else x, data_dir))
    tmp = data_dir[:]
    data_dir = list(filter(lambda x: tmp.remove(x) is None and tmp.count(x) == 0, data_dir))

    print(data_dir)

    tmp = list(map(lambda x: data_dir[data_new.index(list([x[0]]))].append(x[1]) if type(x) == list else x, data_new))
它在最后一行抛出异常,表示给定的输入不是列表

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "demo.py", line 21, in data_preprocessing_tree
    tmp = list(map(lambda x: data_dir[data_new.index(list([x[0]]))].append(x[1]) if type(x) == list else x, data_new))
  File "demo.py", line 21, in <lambda>
    tmp = list(map(lambda x: data_dir[data_new.index(list([x[0]]))].append(x[1]) if type(x) == list else x, data_new))
ValueError: ['/Users/someuser'] is not in list
为此:

[("/", ()), ("/tmp/download", ("file.zip", "file2.zip", “unknown.txt”)), ("/usr/local/bin", ()), ("/User/someuser/", ("file.py", “uknown.txt”))]
也就是说,一个元组列表,第一个元素包含目录,第二个元素是另一个元组,它包含该位置的所有文件


目前,应该将其放入列表列表中,每个内部列表的第一个元素将是位置,其余元素将是文件。

原始数据作为单个文件路径字符串接收,以“;”分隔

构建树的过程如下所示: 1) 将数据转换为字符串形式的文件路径列表[拆分]

2) 如果列表中包含两个点(..)或睫毛(//),则从列表中删除任何路径[filter]

3) 将“txt”附加到任何没有扩展名的文件,即“file”。-->“file.txt”[map]

4) 获取一组不带文件的目录路径,即['/tmp/download/file.zip'、'/tmp/download/file2.zip'、'/usr/local']-->['/tmp/download'、'/usr/local'][map、join、split、rsplit]

5) 将路径列表转换为元组列表,元组分别包含目录路径和文件名,即。['/tmp/download/file.zip'、'/tmp/download/file2.zip'、'/usr/local']-->[('/tmp/download'、'file.zip')、('/tmp/download'、'file2.zip]、('/usr/local',None)][筛选、映射、加入、拆分、rsplit]

6) 对于路径集中的每个路径,创建一个元组,其中第一个元素是路径,第二个元素是包含给定路径中所有文件名的元组,即,['/tmp/download','/usr/local']和[('/tmp/download',file.zip'),('/tmp/download',file2.zip)]->[('/tmp/download',(file.zip,file2.zip)),('/usr/local',())][map,filter]

以上显示的步骤和功能仅为指南,并非获得正确最终答案所必需的

签名,
玛丽娜·利特瓦克(Marina Litvak)

这里有没有不使用列表理解的理由?是的,出于对一切神圣事物的热爱,请使用列表理解,而不是使用lambdas映射。它将极大地提高代码的可读性(并略微提高性能)。另外,这是什么:
lambda x:tmp.remove(x)是None,tmp.count(x)==0?无论怎样,它都是超级黑客,并且将突变与功能结构map混合在一起,这是一种糟糕的风格。这会让代码变得混乱,就像这里的情况一样。@删减或保留多行代码……哦,请给出一个包含实际回溯的示例。我想我应该用这个开场。一旦你开始工作了,我强烈建议你去旅游。
[("/", ()), ("/tmp/download", ("file.zip", "file2.zip", “unknown.txt”)), ("/usr/local/bin", ()), ("/User/someuser/", ("file.py", “uknown.txt”))]