如果我在csv的第二列中的值以“(”或以“)结尾”,我如何删除某个字符,我对python专家来说是一个新手,可以帮助我解决这个问题
示例:
0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,(Java Archive (JAR) 4049-0),Not Supported,
005c41fc0f8580f51644493fcbaa0d2d468312c3,(WIN32 EXE 7-2),Ransom.Win32.TRX.XXPE50FFF027,
到
0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,Java Archive (JAR) 4049-0,Not Supported,
005c41fc0f8580f51644493fcbaa0d2d468312c3,WIN32 EXE 7-2,Ransom.Win32.TRX.XXPE50FFF027,
我使用DATA INFILE获取此代码
TRIM(TRAILING ')' FROM TRIM(LEADING '('
如何在我的代码中将其应用于此处:
with open(fullPath, 'rb') as file:
csv_data = csv.reader(file)
next(csv_data)
答案 0 :(得分:1)
使用lstrip()
和rstrip()
的解决方案
import csv
new_rows = []
with open('test.csv', 'rt') as file:
csv_data = csv.reader(file, delimiter=',')
for row in csv_data:
new_rows.append([row[0],row[1].lstrip('(').rstrip(')'),row[2]])
print(new_rows) # Outputs ['0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,Java Archive (JAR) 4049-0Not Supported', '005c41fc0f8580f51644493fcbaa0d2d468312c3,WIN32 EXE 7-2ansom.Win32.TRX.XXPE50FFF027']
修改
要保存对新.csv文件的修改,只需添加:
with open('test2.csv', 'wt') as file:
writer = csv.writer(file)
for row in new_rows:
writer.writerow(row)
答案 1 :(得分:0)
这是一种实现方式,我从字符串中替换了第一次出现和最后一次出现的'('和')'。希望对您有所帮助。
s = '''0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,(Java Archive (JAR) 4049-0),Not Supported,
005c41fc0f8580f51644493fcbaa0d2d468312c3,(WIN32 EXE 7-2),Ransom.Win32.TRX.XXPE50FFF027,'''
def last_replace(s, old, new, occurrence):
'''Replaces the last occurence of the character'''
li = s.rsplit(old, occurrence)
return new.join(li)
new_string = [last_replace(line, ')', '', 1).replace('(', '', 1) for line in s.split('\n')]
print(new_string)
输出:
['0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,Java Archive (JAR) 4049-0,Not Supported,',
'005c41fc0f8580f51644493fcbaa0d2d468312c3,WIN32 EXE 7-2,Ransom.Win32.TRX.XXPE50FFF027,']
PS:我从here窃取了last_replace
功能
答案 2 :(得分:0)
这是学习regular expressions的绝佳机会!正则表达式是一种识别和处理文本模式的方法。 Python在其标准库中有一个正则表达式包。我将假设您在其余答案中使用的是Python 3,该软件包的名称为re
。
您的问题的TLDR答案是:
import re
string_without_parens = re.sub(r'(^\()|(\)$)', '', string_maybe_has_parens)
不过,这是怎么回事? re.sub()
函数采用三个参数,一个正则表达式字符串(由前导r
表示),一个您要替换每个匹配项的字符串以及一个您要替换的字符串。这里是(^\()|(\)$)
。那是什么意思呢?让我们一步一步来:
()
表示一个捕获组,可以使用这些括号将匹配项取出来,但是我将它们用作将我们正在寻找的字符进行分组的一种方式。此正则表达式中有两个捕获组:(^\()
和(\)$)
。|
字符,它表示正则表达式语言中的OR,因此它正在寻找与(^\()
或 (\)$)
匹配的东西。 / li>
(^\()
:里面有两件事(嗯,确实有三件事,但我们会讲到这一点)。第一个是^
,这就是所谓的 anchor ,特别是这样说:“只看字符串的开头”。第二个(和第三个)字符是\(
,上面写着“我想寻找一个开括号”。因为正则表达式中使用了括号,所以我们必须使用反斜杠字符来“转义”它。(\)$)
:包含一个转义的右括号\)
和其他锚点。该锚点代表字符串的结尾,就像^
代表开始一样。re.sub()
函数说用''替换所有与该模式匹配的东西(即不匹配)。希望有帮助!如果您想更多地使用正则表达式,可以尝试regexr,它帮助我将脑袋环绕在正则表达式上。