首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用csv.reader消除尾随和前导焦

使用csv.reader消除尾随和前导焦
EN

Stack Overflow用户
提问于 2018-11-15 07:34:59
回答 3查看 459关注 0票数 0

如果我在csv第二列中的值以"(“或”结束“)开头,那么我如何删除某个字符呢?

示例:

代码语言:javascript
运行
复制
0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,(Java Archive (JAR) 4049-0),Not Supported,
005c41fc0f8580f51644493fcbaa0d2d468312c3,(WIN32 EXE 7-2),Ransom.Win32.TRX.XXPE50FFF027,

代码语言:javascript
运行
复制
0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,Java Archive (JAR) 4049-0,Not Supported,
005c41fc0f8580f51644493fcbaa0d2d468312c3,WIN32 EXE 7-2,Ransom.Win32.TRX.XXPE50FFF027,

我使用数据信息来编写这段代码

代码语言:javascript
运行
复制
TRIM(TRAILING ')' FROM TRIM(LEADING '('

如何在我的代码中应用它:

代码语言:javascript
运行
复制
with open(fullPath, 'rb') as file:
     csv_data = csv.reader(file)
     next(csv_data)
EN

回答 3

Stack Overflow用户

发布于 2018-11-15 08:14:05

一种使用lstrip()rstrip()的解决方案

代码语言:javascript
运行
复制
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文件中,只需添加:

代码语言:javascript
运行
复制
with open('test2.csv', 'wt') as file:
    writer = csv.writer(file)
    for row in new_rows:
        writer.writerow(row)
票数 2
EN

Stack Overflow用户

发布于 2018-11-15 08:00:22

这里有一种方法,我已经替换了字符串中“(‘和’)”的第一次和最后一次。希望能帮上忙。

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
['0023632fa4a860be8bc85ddf39fc19c3c4c2e6fe,Java Archive (JAR) 4049-0,Not Supported,',
'005c41fc0f8580f51644493fcbaa0d2d468312c3,WIN32 EXE 7-2,Ransom.Win32.TRX.XXPE50FFF027,']

PS :我从这里那里偷了这里函数

票数 0
EN

Stack Overflow用户

发布于 2018-11-15 08:04:29

这是一个学习正则表达式的好机会!正则表达式是识别和处理文本中模式的一种方法。Python有一个正则表达式包作为其标准库的一部分。我将假设您在这个答案的其余部分使用Python3,其中包名为re

TLDR对你的问题的回答是:

代码语言:javascript
运行
复制
import re

string_without_parens = re.sub(r'(^\()|(\)$)', '', string_maybe_has_parens)

不过,这是怎么回事?re.sub()函数接受三个参数,一个正则表达式字符串(由前面的r表示)、一个要替换每个匹配项的字符串以及要替换的字符串。这里的正则表达式是(^\()|(\)$)。那这是什么意思?让我们一步一步地走:

  • 一组圆括号()表示一个捕获组,可以用来获取匹配项,但我已经使用它们来分组我们正在寻找的字符。这个正则表达式中有两个捕获组:(^\()(\)$)
  • 在这些字符之间是一个|字符,在正则表达式语言中表示OR,因此它正在寻找与(^\()(\)$)匹配的内容。
  • 第一个捕获组(^\():有两个东西在里面(好吧,三个真的,但我们会讲到这一点)。第一个是^,这就是所谓的锚,这个特别地说,“只看字符串的开头”。第二个(和第三个)字符是\(,它表示“我想寻找一个开头的括号”。因为括号在正则表达式中使用,所以我们必须使用反斜杠来“转义”它。
  • 第二个捕获组(\)$):包含一个转义结束括号、\)和其他锚点。这个锚点代表字符串的末尾,就像^表示开始一样。
  • 这说明:“在开头匹配一个开括号,在末尾匹配一个结束括号”,而re.sub()函数用'‘替换任何与此模式匹配的内容(即没有)。

希望这能帮上忙!如果你想玩更多的正则表达式,你可以试试雷杰斯,它帮我把我的头绕在它们周围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53314447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档