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

Python 删除包含两个单词的引号,并删除它们之间的逗号

Python 删除包含两个单词的引号,并删除它们之间的逗号,python,process,delimiter,text-processing,data-processing,Python,Process,Delimiter,Text Processing,Data Processing,跟进 扩展输入和预期输出: 试图用&替换第二行中两个单词Durango和PC之间的逗号,然后删除引号“,第三行与Orbis和PC相同,第四行在引号中有两个单词组合,我想处理AAA字符技术,SOF-UPIs、“杜兰戈、奥比斯、PC” 我希望使用Python保留其余的行 输入 2,SIN-Rendering,Core Tech - Rendering,PC,147,Reopened 2,Kenny Chong,Core Tech - Rendering,"Durango, PC",55,Reopen

跟进

扩展输入和预期输出:

试图用&替换第二行中两个单词Durango和PC之间的逗号,然后删除引号“,第三行与Orbis和PC相同,第四行在引号中有两个单词组合,我想处理AAA字符技术,SOF-UPIs、“杜兰戈、奥比斯、PC”

我希望使用Python保留其余的行

输入

2,SIN-Rendering,Core Tech - Rendering,PC,147,Reopened
2,Kenny Chong,Core Tech - Rendering,"Durango, PC",55,Reopened
3,SIN-Audio,AAA - Audio,"Orbis, PC",13,Open
LTY-168499,[PC][PS4][XB1] Missing textures from Fort Capture NPC face,3,CTU-CharacterTechBacklog,"AAA - Character Tech, SOF - UPIs","Durango, Orbis, PC",29,Waiting For
...
... 
...
这样,我的示例中可以有100行。因此,预期输出为:

2,SIN-Rendering,Core Tech - Rendering,PC,147,Reopened
2,Kenny Chong,Core Tech - Rendering, Durango & PC,55,Reopened
3,SIN-Audio,AAA - Audio, Orbis & PC,13,Open
LTY-168499,[PC][PS4][XB1] Missing textures from Fort Capture NPC face,3,CTU-CharacterTechBacklog,AAA - Character Tech & SOF - UPIs,Durango, Orbis & PC,29,Waiting For
...
...
...
到目前为止,我可以想一行一行地阅读,如果行中包含引号,那么就用不带字符的字符替换它,但是替换里面的符号是我一直坚持的

以下是我现在拥有的:

for line in lines:
            expr2 =  re.findall('"(.*?)"', line)
            if len(expr2)!=0:
                expr3 = re.split('"',line)
                expr4 = expr3[0]+expr3[1].replace(","," &")+expr3[2]
                print >>k, expr4
            else:
                print >>k, line
但是它不考虑第四行中的情况,也可以有3多个组合。
3,SIN-Audio,"AAA - Audio, xxxx, yyyy","Orbis, PC","13, 22",Open 
我希望这样做
3,SIN音频,AAA-音频和xxxx&yyyy,Orbis&PC,13&22,打开


如何实现这一点,有什么建议吗?学习Python。

因此,通过将输入文件视为
.csv
,我们可以轻松地将行转换为易于使用的内容

比如说,

2,55岁的Durango&PC核心技术渲染公司Kenny Chong重新开放

全文如下:

['2'、'Kenny Chong'、'Core Tech-Rendering'、'Durango,PC'、'55'、'重新打开]

然后,通过将
的所有实例替换为
&
(空格),我们将得到以下行:

['2'、'Kenny Chong'、'Core Tech-渲染'、'Durango&PC'、'55'、'重新打开]

它在一行中替换了多个
的实例,在最后编写时,我们不再使用原来的双引号

这里是代码,因为
in.txt
是您的输入文件,它将写入
out.txt

import csv

with open('in.txt') as infile:
    reader = csv.reader(infile)

    with open('out.txt', 'w') as outfile:
        for line in reader:
            line = list(map(lambda s: s.replace(',', ' &'), line))
            outfile.write(','.join(line) + '\n')
第四行输出为:


LTY-168499,[PC][PS4][XB1]Fort Capture NPC face,3,CTU CharacterTechBacklog,AAA-Character Tech&SOF-UPIs,Durango&Orbis&PC,29岁,正在等待

请检查一下:我找不到一个可以这样做的表达式。所以做的方式有点复杂。如果我能找到更好的方式,将会更新(Python 3)


请注意,您可以使用
csv.writer()
来编写csv文件。无需使用
outfile.write(','.join(line)+'\n')
自行编写。您是对的,最初我只是想完全控制列表的编写。我认为csv.writer可能会以任何方式生成相同的输出。
import re
st = "3,SIN-Audio,\"AAA - Audio, xxxx, yyyy\",\"Orbis, PC\",\"13, 22\",Open"
found = re.findall(r'\"(.*)\"',st)[0].split("\",\"")
final = ""
for word in found:
    final = final + (" &").join(word.split(","))+","
result = re.sub(r'\"(.*)\"',final[:-1],st)
print(result)