Python连接两行并使用新行创建csv

Python连接两行并使用新行创建csv,python,csv,row,concatenation,Python,Csv,Row,Concatenation,我希望有人能给我指出正确的方向 我想创建一个变量,它将第[0]行和第[1]行连接在一起,中间有一个“-”,并创建一个只包含新变量的新csv文件 我正在使用的csv文件如下所示: #!c:/users/jon/python #Python 2.7.6 import csv from string import maketrans intab = "()-/" outtab = " " tab0 = maketrans(intab, outtab) plist1 = [] x1 = ''

我希望有人能给我指出正确的方向

我想创建一个变量,它将第[0]行和第[1]行连接在一起,中间有一个“-”,并创建一个只包含新变量的新csv文件

我正在使用的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
我希望新的csv文件只包含一个单元格/值,如下所示:

phone#1,phone#2,phone#3,phone#4
(AAA)111/1111,(BBB)222-2222,(CCC)333/3333,(DDD)444-4444
writerow需要一个iterable,因此在plist1行上迭代是一个字符串,写入文件时,writer迭代该字符串并将其拆分为单个字符

如果plist是一个包含单个元素的列表,只需使用:

newcsv1 = csv.writer(open('newcsv1.csv', 'wb'))
for row in plist1:
    newcsv1.writerow([row]) # put row inside a list
这将把AAA1111111-BBB222222写入您的文件

使用您的代码:

newcsv1.writerow(plist1)
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

我认为您已经从一个简单的问题中生成了一些复杂的代码。以下是我将根据问题而不是您的代码所做的:

newcsv1.writerow(plist1)
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

我不熟悉csvfile模块,因此可能会有一些改进,但我认为您的代码应该像这样简单,如果不是更简单的话。

您想得太多了。CSV与任何其他文件一样,因此这将起作用:

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)

为了补充Padraic的答案,您正在传递一个字符串,该字符串也是一个iterable。见此:

with open('newcsv1.csv', 'w') as newcsv1:
    newcsv1.write(str(x1) + '\n')

我对否决票很好奇,考虑到代码解决了他的问题,它很简单,我确实注意到我对CSV模块缺乏了解。也许通过一些反馈,我可以改进答案。我可以为plist1添加更多值吗?假设我希望新的csv文件包含行[0]-行[1]和其他行的值?就像第[5]行、第[8]行和第[10]行一样。。换句话说,我可以向plist1追加更多的值吗?是的,只要确保在迭代plist时将每个值追加到列表中,或者将每个值包装到列表中,我如何才能将每一行追加到列表中?plist1.append[x1]这是追加更多行的最有效方法吗?x1=x1+'、'+行[2]+'、'+行[3]我可以将[x1]转换为字符串以避免打印单引号和方括号吗?