Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_List_File_Formatting_Tuples - Fatal编程技术网

如何在Python中从特定列表项中删除换行符

如何在Python中从特定列表项中删除换行符,python,list,file,formatting,tuples,Python,List,File,Formatting,Tuples,这段代码比较第(i)个和第(i+1)个项目的标识符是否相同,它需要用管道字符替换换行符 string="" for i in range(0,len(arrangedList)-1): if arrangedList[i][0]==arrangedList[i+1][0]: string = arrangedList[i][1][1] if "\n" in string: string.replace("\n","|")

这段代码比较第(i)个和第(i+1)个项目的标识符是否相同,它需要用管道字符替换换行符

string=""
for i in range(0,len(arrangedList)-1):
    if arrangedList[i][0]==arrangedList[i+1][0]:
        string = arrangedList[i][1][1]
        if "\n" in string:
            string.replace("\n","|")
        arrangedList[i][1][1]=string
但是,它返回一个错误:

TypeError:“tuple”对象不支持项分配

我无法理解将其转换为元组而不是列表的位置

文件格式如下:

[0, ('Filename', './root/lib/\n')]
[0, ('Description', 'Socket\n')]
[0, ('ListenStream', 'someSocket\n')]
[0, ('SocketMode', 'someNumber\n')]
[0, ('Service', 'someService\n')]
[1, ('Filename', './root/lib/\n')]
[1, ('Description', 'Socket\n')]
[1, ('ListenStream', 'someSocket\n')]
所需格式为:

[0, ('Filename', './root/lib/|')]
[0, ('Description', 'Socket|')]
[0, ('ListenStream', 'someSocket|')]
[0, ('SocketMode', 'someNumber|')]
[0, ('Service', 'someService\n|']
[1, ('Filename', './root/lib/|')]
[1, ('Description', 'Socket|')]
[1, ('ListenStream', 'someSocket|')]
现在有了“|”字符,而不是一些换行符


另外,在一些后期格式化之后,它将被用于标记表。

这意味着,
元组是不可变的,这意味着您不能更改其中的值,如果您想要一个不同的值,您必须创建一个新的值

问题出在
排列列表[i][1][1]=string

一个简单的修复方法:
arrangedList[i][1]=(arrangedList[i][1][0],string)


(您可以分配给
排列列表[i][1]
,因为它是一个
列表,而不是
元组

这意味着,
元组是不可变的,这意味着您无法更改其中的值,如果您想要不同的值,必须创建一个新值

问题出在
排列列表[i][1][1]=string

一个简单的修复方法:
arrangedList[i][1]=(arrangedList[i][1][0],string)


(您可以分配给
排列列表[i][1]
,因为它是一个
列表,而不是
元组

,因为正确地提到元组是不可变的对象。因此,如果输入数据是元组形式的,则需要将其转换为列表,然后对数据进行更改。试试这个:

arrangedList = [[0, ('Filename', './root/lib/\n')],
                [0, ('Description', 'Socket\n')],
                [0, ('ListenStream', 'someSocket\n')],
                [0, ('SocketMode', 'someNumber\n')],
                [0, ('Service', 'someService\n')],
                [1, ('Filename', './root/lib/\n')],
                [1, ('Description', 'Socket\n')],
                [1, ('ListenStream', 'someSocket\n')]]

# Convert the tuples to lists
for item in arrangedList:
    item[1] = list(item[1])

string=""
for i in range(0,len(arrangedList)-1):
    if arrangedList[i][0]==arrangedList[i+1][0]:
        # string = arrangedList[i][1][1]
        print('STRING: ', string)
        string = arrangedList[i][1][1]
        if "\n" in string:
            string = string.replace("\n","|")
        arrangedList[i][1][1]=string

print(arrangedList)
还要注意,
replace
方法返回原始字符串的一个副本,其中包含更改。它不会更改原始字符串


还有一件事-您的输出应该是这样的
Filename','./root/lib/|
,但不是这样的
'Filename','./root/lib/'.
。管道符号必须位于字符串内部。

正如正确提到的,元组是不可变的对象。因此,如果输入数据是元组形式的,则需要将其转换为列表,然后对数据进行更改。试试这个:

arrangedList = [[0, ('Filename', './root/lib/\n')],
                [0, ('Description', 'Socket\n')],
                [0, ('ListenStream', 'someSocket\n')],
                [0, ('SocketMode', 'someNumber\n')],
                [0, ('Service', 'someService\n')],
                [1, ('Filename', './root/lib/\n')],
                [1, ('Description', 'Socket\n')],
                [1, ('ListenStream', 'someSocket\n')]]

# Convert the tuples to lists
for item in arrangedList:
    item[1] = list(item[1])

string=""
for i in range(0,len(arrangedList)-1):
    if arrangedList[i][0]==arrangedList[i+1][0]:
        # string = arrangedList[i][1][1]
        print('STRING: ', string)
        string = arrangedList[i][1][1]
        if "\n" in string:
            string = string.replace("\n","|")
        arrangedList[i][1][1]=string

print(arrangedList)
还要注意,
replace
方法返回原始字符串的一个副本,其中包含更改。它不会更改原始字符串


还有一件事-您的输出应该是这样的
Filename','./root/lib/|
,但不是这样的
'Filename','./root/lib/'.
。管道符号必须在字符串内部。

您能打印“排列列表”的内容吗?从您的代码来看,它似乎是一个列表列表,每个列表有两个元素,第二个元素是元组(由两个元素组成)。如果是这样,您试图将元素分配给元组(
arrangedList[i][1][1]=string
),这在Python中是非法的(元组是不可变的)。您可能需要列表而不是元组。您可以打印“arrangedList”的内容吗?从您的代码来看,它似乎是一个列表列表,每个列表有两个元素,第二个元素是元组(由两个元素组成)。如果是这样,您试图将元素分配给元组(
arrangedList[i][1][1]=string
),这在Python中是非法的(元组是不可变的)。您可能需要一个列表而不是元组。
如果字符串中的“\n:
应该消失<代码>字符串不需要初始化为
”<代码>字符串
是个坏名字。整个数据结构应该从一开始就更改,而不是在这部分代码中临时更改。@hop,我同意你的看法。我会给不同的名字。我的答案是关于解决他的问题,但不是重命名他的变量。
如果字符串中的“\n:
应该消失<代码>字符串不需要初始化为
”<代码>字符串
是个坏名字。整个数据结构应该从一开始就更改,而不是在这部分代码中临时更改。@hop,我同意你的看法。我会给不同的名字。我的答案是关于解决他的问题,但不是重命名他的变量。感谢在某个时候预定义列表已更改为元组。感谢在某个时候预定义列表已更改为元组。