Python加入两行并使用新行创建csv

时间:2014-08-10 17:31:12

标签: python csv row concatenation

#!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 个答案:

答案 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')