[英]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.