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

时间:2017-05-15 09:56:26

标签: python list file formatting tuples

此代码比较(i)第(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|')]

而不是一些换行符,有'|'现在的角色。

P.S。经过一些后期格式化后,它将用于降价表。

2 个答案:

答案 0 :(得分:2)

这意味着它所说的,tuple是不可变的,这意味着你无法改变它们内部的值,如果你想要一个不同的值,你必须创建一个新的。

问题出在arrangedList[i][1][1]=string

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

(您可以指定arrangedList[i][1],因为它是list,而不是tuple

答案 1 :(得分: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/'|。管道标志必须在字符串内部。