![](/img/trans.png)
[英]Make python configobj to not put a space before and after the '='
[英]How to make Python only look at commas with no space before or after as delimiters
我有一个csv文件,我正在尝试读取python,操作,然后写入另一个csv文件。
我目前的问题是虽然文件是逗号分隔的,但并非所有逗号都是分隔符。
只有那些不是由前面的空间和/或随后的逗号应该算作定界符。 (仅“,”而不是“,”或“,”)。
这是我的代码的样子:
import csv
#open file for reading
with open(mypath, 'r', encoding = 'utf_8') as csvfile:
myfile = list(csv.reader(csvfile, dialect = 'excel', delimiter = ','))
#specifying columns to be deleted
BadCols = [29,28,27,25,21,20,19,18,16,15,14,13,12,11,8,7,4,3]
#Loop through column indices to be deleted
for col in BadCols:
#Loop through each row to delete columns
for i, row in enumerate(myfile):
#Delete Column, which is basically a list item at that row
myfile[i].pop(col)
#Open file for writing
with open(mypath2, "w", encoding = 'utf_8', newline='') as csvfile:
csv_file = csv.writer(csvfile, dialect = 'excel', delimiter = ',')
for i, row in enumerate(myfile):
for j, col in enumerate(row):
csvfile.write('%s, ' %col)
csvfile.write('\n')
csvfile.close
这是我的数据的样子:
Date,Name,City
May 30, 2016,Ryan,Boston
这是我在使用excel打开文件时想要看到的内容:
Date Name City
May 30, 2016 Ryan Boston
这是我在Excel中实际看到的内容:
Date [Blank column name] Name City
May 30 2016 Ryan Boston
因此,日期被读作两个元素而不是一个。
非常感激任何的帮助。
正则表达式可能是您最好的选择:
import re
patt = re.compile(r"\b,\b")
with open("in.csv") as f:
for row in map(patt.split, f):
print(row)
哪个会给你:
['Date', 'Name', 'City\n']
['May 30, 2016', 'Ryan', 'Boston']
你将不得不照顾尾随的空白,但这不应该是一个大问题。 显然,如果你把"foo,bar"
作为一个名字"foo,bar"
你也会遇到问题"foo,bar"
但如果没有,那么re方法就没问题了。
另一个选择是用一个空格替换", "
或" ,"
:
import csv
import re
patt = re.compile(r"\s(,)|(,)\s")
with open("in.csv") as f:
for line in csv.reader(map(lambda s: patt.sub(" ", s), f)):
print(line)
因此对于:
Date,Name,City
May 30, 2016,Ryan,Boston
May 31 ,2016,foo,Narnia
你会得到:
['Date', 'Name', 'City']
['May 30 2016', 'Ryan', 'Boston']
['May 31 2016', 'foo', 'Narnia']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.