我正在尝试修复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]
我在做错了什么。请提供建议。
感谢
答案 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