簡體   English   中英

如何在python中替換列表中的單引號

[英]How to replace single quotes from a list in python

我有一個清單:

my_list = ['"3"', '"45"','"12"','"6"']

該列表具有單引號和雙引號以及項目值。 如何替換每個項目中的單引號或雙引號。 我在下面嘗試過,但是結果是一樣的:

my_list = [i.replace("''", " ") for i in my_list]

您的列表不包含任何帶有單引號的字符串。 我認為您正在將字符串的repr()表示與它們的值混淆。

當您打印Python標准庫容器(例如列表(或元組,集合,字典等))時,該容器的內容將顯示為它們的repr()表示輸出。 這在調試時非常有用,因為它可以清楚說明您擁有的對象類型。 對於字符串,表示形式使用有效的Python字符串文字語法; 您可以復制輸出並將其粘貼到另一個Python腳本或交互式解釋器中,並獲得完全相同的值。

例如,這里的s是一個包含一些文本,一些引號字符和換行符的字符串。 當我打印字符串時,換行符會導致額外的空白行被打印,但是當我使用repr() ,您將以Python語法形式獲得字符串值,其中單引號是語法的一部分,而不是值。 請注意,換行符也使用\\n語法顯示,與我首先創建s字符串時完全相同:

>>> s = 'They heard him say "Hello world!".\n'
>>> print(s)
They heard him say "Hello world!".

>>> print(repr(s))
'They heard him say "Hello world!".\n'
>>> s
'They heard him say "Hello world!".\n'

當我在末尾回顯s值時,交互式解釋器還會使用repr()輸出向我顯示該值。

因此,在列表中,字符串不包含'字符作為值的一部分。 它們是字符串語法的一部分。 您只需要替換"字符,它們成為值的一部分,因為它們位於最外層的'...'字符串文字語法中。您可以使用str.replace('"', '')刪除它們:

[value.replace('"', '') for value in my_list]

或者,您可以使用str.strip()方法僅刪除值開頭或結尾的引號:

[value.strip('"') for value in my_list]

兩者都適合您的樣本列表:

>>> my_list = ['"3"', '"45"','"12"','"6"']
>>> [value.replace('"', '') for value in my_list]
['3', '45', '12', '6']
>>> [value.strip('"') for value in my_list]
['3', '45', '12', '6']

同樣, '字符不是值的一部分:

>>> first = my_list[0].strip('"')
>>> first         # echo, uses repr()
'3'
>>> print(first)  # printing, the actual value written out
3
>>> len(first)    # there is just a single character in the string
1

但是 ,我已經看到您正在從手工分析的制表符分隔的文件中讀取數據。 您可不必處理"的報價完全如果你代替csv.reader()對象 ,配置為處理選項卡作為分隔符那類會自動將處理引用列:

import csv

with open(inputfile, 'r', newline='') as datafile:
    reader = csv.reader(datafile, delimiter='\t')
    for row in reader:
        # row is a list with strings, *but no quotes*
        # e.g. ['3', '45', '12', '6']

該演示顯示了csv.reader()如何處理引號:

>>> import csv
>>> lines = '''\
... "3"\t"45"\t"12"\t"6"
... "42"\t"81"\t"99"\t"11"
... '''.splitlines()
>>> reader = csv.reader(lines, delimiter='\t')
>>> for row in reader:
...     print(row)
...
['3', '45', '12', '6']
['42', '81', '99', '11']

正如@MartijnPieters在評論中建議的那樣,您可以在字符串上使用replace以獲得所需的輸出。

我想建議的更改是使用.replace('"', '')而不是.replace('"', ' ') 否則,結果字符串將具有前導和尾隨空格

您可以使用列表理解來處理這樣的列表

my_list = ['"3"', '"45"','"12"','"6"']

new_list = [x.replace('"', '') for x in my_list]

print(new_list) # ['3', '45', '12', '6']

您可以使用split:

[x.split('"')[1] for x in my_list]

或者您可以使用:

[x.strip('"') for x in my_list]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM