Python连接两行并使用新行创建csv
我希望有人能给我指出正确的方向 我想创建一个变量,它将第[0]行和第[1]行连接在一起,中间有一个“-”,并创建一个只包含新变量的新csv文件 我正在使用的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 = ''
#!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]转换为字符串以避免打印单引号和方括号吗?