如何用cthon中的字符串替换csv中的数字

时间:2017-10-24 17:28:13

标签: python csv

我正在尝试修复CSV文件的第一行。如果标题中的列名从a-z以外的任何其他位置开始,则必须预先添加NUM。以下代码修复了第一行每列中的特殊字符,但不知何故无法获取!a-z。

path = ('test.csv')

for fname in glob.glob(path):

    with open(fname, newline='') as f:
        reader = csv.reader(f)
        header = next(reader) 
        header = [column.replace ('-','_') for column in header]
        header = [column.replace ('[!a-z]','NUM') for column in header]
我在做错了什么。请提供建议。 感谢

3 个答案:

答案 0 :(得分:0)

我相信你会想要用这些内容替换'column.replace'部分:

re.sub(r'[!a-z]', 'NUM', column)

完整的文档参考仅供参考:https://docs.python.org/2/library/re.html https://www.regular-expressions.info/python.html

答案 1 :(得分:0)

既然你说 prepend 'NUM',你可以做这样的事情(这可能更有效,但这显示了基本的想法)。

import string

column = '123'

if column[0] not in string.ascii_lowercase:
    column = 'NUM' + column

# column is now 'NUM123'

答案 2 :(得分:0)

你可以这样做。

# csv file: 
# 2Hello, ?WORLD
# 1, 2

import csv
with open("test.csv", newline='') as f:
    reader = csv.reader(f)
    header = next(reader)
    print("Original header", header)
    header = [("NUM" + header[indx][1::]) for indx in range(len(header)) if not header[indx][0].isalpha()]
    print("Modified header", header)

输出:

Original header ['2HELLO', '?WORLD']
Modified header ['NUMHELLO', 'NUMWORLD']

上面的列表理解等同于以下for循环:

 for indx in range(len(header)):
        if not header[indx][0].isalpha():
            header[indx] = "NUM" + header[indx][1::]

如果您只想替换数字,请使用以下内容:

if header[indx][0].isdigit():

如果它根据许多相关的字符串函数更改,您可以根据您的要求对其进行修改。 https://docs.python.org/2/library/string.html