Python string.replace,仅在特定情况下替换
Python string.replace, only replace under certain circumstances
我正在分析从收据中获得的销售数据。所有购买的物品都在一列中作为一个字符串,如下所示:
'1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie'
我想把所有的物品分开来计算购买的物品数量。简单的 string.split(',')
不行,因为某些项目的名称中也有逗号。幸运的是,这些名称用双引号括起来,而 'normal' 名称不是。
如何替换双引号内的逗号而不是分隔项的逗号?
如果这些名字中的逗号变成冒号,例如,解析字符串可以用string.split()
来完成。所以所需的输出将是这样的:
'1 x Sandwich, "2 x Coffee: with cream", 1 x Apple pie'
可能还有其他解决方案,但这个问题让我开始考虑替换非常具体的字符。
你需要试着告诉它用一个特定的字符来分隔它。在这种情况下,尝试 string.split('"')
您的输入无效,因为缺少一个关闭 "
和一个打开 "
。
"1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie"
^ ^
我在这里使用 Pythons csv
模块。选项 skipinitialspace
非常重要,因为在 ,
之后有空白字符 (space),这在 CSV 文件中是不常见的。
#!/usr/bin/env python3
import io
import csv
your_invalid_input = '"1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie"'
valid_input = '"1 x Sandwich", "2 x Coffee, with cream", "1 x Apple pie"'
# this simulates a file object
raw_data = io.StringIO(valid_input)
csv_reader = csv.reader(raw_data,
delimiter=',',
skipinitialspace=True)
for line in csv_reader:
print(line)
输出为
['1 x Sandwich', '2 x Coffee, with cream', '1 x Apple pie']
text = '1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie'
def comma_changer(text):
text = list(text)
quote_counter = 0
for i,char in enumerate(text):
if char == '"':
quote_counter+=1
elif char == ",":
if quote_counter%2 == 1:
text[i] = ":"
return("".join(text))
comma_changer(text) #'1 x Sandwich, "2 x Coffee: with cream", 1 x Apple pie'
我正在分析从收据中获得的销售数据。所有购买的物品都在一列中作为一个字符串,如下所示:
'1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie'
我想把所有的物品分开来计算购买的物品数量。简单的 string.split(',')
不行,因为某些项目的名称中也有逗号。幸运的是,这些名称用双引号括起来,而 'normal' 名称不是。
如何替换双引号内的逗号而不是分隔项的逗号?
如果这些名字中的逗号变成冒号,例如,解析字符串可以用string.split()
来完成。所以所需的输出将是这样的:
'1 x Sandwich, "2 x Coffee: with cream", 1 x Apple pie'
可能还有其他解决方案,但这个问题让我开始考虑替换非常具体的字符。
你需要试着告诉它用一个特定的字符来分隔它。在这种情况下,尝试 string.split('"')
您的输入无效,因为缺少一个关闭 "
和一个打开 "
。
"1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie"
^ ^
我在这里使用 Pythons csv
模块。选项 skipinitialspace
非常重要,因为在 ,
之后有空白字符 (space),这在 CSV 文件中是不常见的。
#!/usr/bin/env python3
import io
import csv
your_invalid_input = '"1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie"'
valid_input = '"1 x Sandwich", "2 x Coffee, with cream", "1 x Apple pie"'
# this simulates a file object
raw_data = io.StringIO(valid_input)
csv_reader = csv.reader(raw_data,
delimiter=',',
skipinitialspace=True)
for line in csv_reader:
print(line)
输出为
['1 x Sandwich', '2 x Coffee, with cream', '1 x Apple pie']
text = '1 x Sandwich, "2 x Coffee, with cream", 1 x Apple pie'
def comma_changer(text):
text = list(text)
quote_counter = 0
for i,char in enumerate(text):
if char == '"':
quote_counter+=1
elif char == ",":
if quote_counter%2 == 1:
text[i] = ":"
return("".join(text))
comma_changer(text) #'1 x Sandwich, "2 x Coffee: with cream", 1 x Apple pie'