我的csv文件在标题行中包含不需要的第一个字符,但第一列除外。 while循环从标题中删除第一个字符,并将新标题行写入新文件(按计数器退出)。然后,else语句将其余行写入新文件。问题是else语句以标题行开头并第二次写入。有没有办法让别人开始下一行而不打破for迭代器?实际文件是21列乘400,000+行。不需要的字符是单个空格,但我在下面的示例中使用了*以便于查看。谢谢你的帮助!
file.csv =
一,* B *,C,* d
1,2,3,4
import csv
reader = csv.reader(open('file.csv', 'rb'))
writer = csv.writer(open('file2.csv','wb'))
count = 0
for row in reader:
while (count <= 0):
row[1]=row[1][1:]
row[2]=row[2][1:]
row[3]=row[3][1:]
writer.writerow([row[0], row[1], row[2], row[3]])
count = count + 1
else:
writer.writerow([row[0], row[1], row[2], row[3]])
答案 0 :(得分:1)
如果您只想更改标题并复制剩余的行而不做更改:
with open('file.csv', 'r') as src, open('file2.csv', 'w') as dst:
dst.write(next(src).replace(" ", "")) # delete whitespaces from header
dst.writelines(line for line in src)
答案 1 :(得分:0)
如果您要删除空格,可以使用:
string.replace(" ", "")
答案 2 :(得分:0)
为什么不使用枚举并检查你的行是否是标题?
import csv
reader = csv.reader(open('file.csv', 'rb'))
writer = csv.writer(open('file2.csv','wb'))
for i, row in enumerate(reader):
if i == 0:
writer.writerow([row[0],
row[1].lstrip(),
row[2].lstrip(),
row[3].lstrip()])
else:
writer.writerow([row[0], row[1], row[2], row[3]])
答案 3 :(得分:0)
如果您有21列,则不想编写row[0], ... , row[21]
。此外,您希望在打开文件后关闭它们。 .next()
获取标题。 strip()
可让您灵活地删除不需要的前导和尾随字符。
import csv
file = 'file1.csv'
newfile = open('file2.csv','wb')
writer = csv.writer(newfile)
with open(file, 'rb') as f:
reader = csv.reader(f)
header = reader.next()
newheader = []
for c in header:
newheader.append(c.strip(' '))
writer.writerow(newheader)
for r in reader:
writer.writerow(r)
newfile.close()