#!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
答案 0 :(得分: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
答案 1 :(得分: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模块,因此可能会有一些改进,但我认为你的代码应该像这样简单,如果不是更简单的话。
答案 2 :(得分:0)
要添加到Padraic的答案 - 你传递的字符串也是可迭代的。见:
>>> s = "abcd"
>>> for i in s:
... print i,
...
a b c d
答案 3 :(得分:-1)
你过度思考它。 CSV就像任何其他文件一样,所以这将起作用:
with open('newcsv1.csv', 'w') as newcsv1:
newcsv1.write(str(x1) + '\n')