Python合并两行并创建新行的CSV文件
#!c:/users/jon/python
#Python 2.7.6
import csv
from string import maketrans
intab = "()-/"
outtab = " "
tab0 = maketrans(intab, outtab)
plist1 = []
x1 = ''
with open('o:/p1.csv', 'rb') as f1:
csvfile1 = csv.reader(f1)
next(f1)
for row in csvfile1:
row[0] = row[0].translate(tab0).replace(' ','')
row[1] = row[1].translate(tab0).replace(' ','')
x1 = row[0] + '-' + row[1]
plist1.append(x1)
f1.close()
print str(x1)
# prints correctly:
# AAA1111111-BBB2222222
newcsv1 = csv.writer(open('newcsv1.csv', 'wb'))
for row in plist1:
newcsv1.writerow(row)
# creates a csv file that looks like below:
# A,A,A,1,1,1,1,1,1,1,-,B,B,B,2,2,2,2,2,2,2
我希望有人能给我指个方向...
我想创建一个变量,这个变量将把 row[0] 和 row[1] 这两项用一个 '-' 连接起来,然后生成一个新的 csv 文件,这个文件只包含这个新变量。
我正在处理的 csv 文件大致如下:
phone#1,phone#2,phone#3,phone#4
(AAA)111/1111,(BBB)222-2222,(CCC)333/3333,(DDD)444-4444
我希望新的 csv 文件只包含一个单元格/值,如下所示:
AAA1111111-BBB2222222
4 个回答
-1
你想得太复杂了。CSV文件就像其他文件一样,所以这样做是可以的:
with open('newcsv1.csv', 'w') as newcsv1:
newcsv1.write(str(x1) + '\n')
0
补充一下Padraic的回答——你传递的是一个字符串,而字符串也是一种可迭代的东西。看看这个:
>>> s = "abcd"
>>> for i in s:
... print i,
...
a b c d
0
newcsv1 = csv.writer(open('newcsv1.csv', 'wb'))
for row in plist1:
newcsv1.writerow([row]) # put row inside a list
writerow
这个函数需要一个可迭代的对象,也就是说它需要一个可以逐个取出元素的东西。而你传入的 plist1
的一行是一个字符串,所以 writer
会把这个字符串当成一个个字符来处理,写入文件时就会把它拆分成单个字符。
如果 plist
是一个只有一个元素的列表,你只需要这样做:
newcsv1.writerow(plist1)
这样就会把 AAA1111111-BBB2222222
写入你的文件。
使用你的代码:
with open("newcsv1.csv") as f:
next(f)
csvfile1 = csv.reader(f)
for row in csvfile1:
print row
row[0] = row[0].translate(tab0).replace(' ','')
row[1] = row[1].translate(tab0).replace(' ','')
x1 = row[0] + '-' + row[1]
row[2] = row[2].translate(tab0).replace(' ','')
row[3] = row[3].translate(tab0).replace(' ','')
x2 = row[2] + '-' + row[3]
plist1.append([x1]) # append inside a list
plist1.append([x2])
newcsv1 = csv.writer(open('newcsv1.csv', 'wb'))
newcsv1.writerows(plist1) # write all rows from the list
0
我觉得你把一个简单的问题搞得很复杂了。根据问题,我会这样做,而不是按照你的代码:
from string import maketrans
tab = maketrans("()-/", " ")
with open("o:/p1.csv", "rb") as fi:
with open("output.csv", "wb") as fo:
fi.readline() # skip first line
for line in fi:
line = line.translate(tab).replace(" ", "")
newvals = line.split(",")
newrow = newvals[0] + '-' + newvals[1] + '\n'
fo.write(newrow)
我对csvfile模块不太熟悉,所以那里可能还有改进的空间。不过,我觉得你的代码应该可以简单到这个程度,甚至更简单。