Python 如何将尾随零添加到csv文件

Python 如何将尾随零添加到csv文件,python,csv,Python,Csv,我试过了 num_columns = 982 def transform_row(row): #row = row.split('\n') # split on new line row = row.split(',') # split on commas row = [i.split() for i in row if i!='5'] # remove 5s row += ['0']*(num_columns - len(row)) # add 0s

我试过了

num_columns = 982

def transform_row(row):
    #row = row.split('\n')  # split on new line
    row = row.split(',')  # split on commas
    row = [i.split() for i in row if i!='5']  # remove 5s
    row += ['0']*(num_columns - len(row))  # add 0s to end
    return ','.join(row) 
#and then apply this over the csv.

out = open('outfile.csv', 'w')
for row in open('dataset_TR1.csv'):
    out.write(transform_row(row))

本质上,我希望删除csv文件中每一行的所有5,并用982和983列之间的尾随0替换缺少的长度。但是,使用中的数据文件,这似乎只会将所有内容写入一行,输出结果与预期不符。

您必须分别处理逗号和新行以保持正确

rows = "1,5,5,5,3\n2,5,5,5,9"
rows = rows.split('\n')
lines = []

for idx, row in enumerate(rows):
  row = row.split(',')  # split on commas
  row = [i for i in row if i!='5']  # remove 5s
  row += ['0']*(5 - len(row))  # add 0s to end
  row = ','.join(row)
  lines.append(row)


print(rows)
lines = '\n'.join(lines)
print(lines)

在上扫描并拆分\n。然后分别扫描每一行,进行替换,然后将所有内容放回原处。

您必须分别处理逗号和新行,以保持正确

rows = "1,5,5,5,3\n2,5,5,5,9"
rows = rows.split('\n')
lines = []

for idx, row in enumerate(rows):
  row = row.split(',')  # split on commas
  row = [i for i in row if i!='5']  # remove 5s
  row += ['0']*(5 - len(row))  # add 0s to end
  row = ','.join(row)
  lines.append(row)


print(rows)
lines = '\n'.join(lines)
print(lines)

在上扫描并拆分\n。然后逐个扫描每一行,进行替换,然后将所有内容放回原处。

更好的方法是使用内置模块
csv

import csv
num_columns = 982

def transform_row(row):
    row = [column for column in row if column != '5']
    row += ['0'] * (num_columns - len(row))
    return row

fout = open('outfile.csv', 'w', newline='')
writer = csv.writer(fout)
fin = open('dataset_TR1.csv', 'r')
reader = csv.reader(fin)
for row in reader:
    writer.writerow(transform_row(row))

更好的方法是使用内置模块
csv

import csv
num_columns = 982

def transform_row(row):
    row = [column for column in row if column != '5']
    row += ['0'] * (num_columns - len(row))
    return row

fout = open('outfile.csv', 'w', newline='')
writer = csv.writer(fout)
fin = open('dataset_TR1.csv', 'r')
reader = csv.reader(fin)
for row in reader:
    writer.writerow(transform_row(row))


对的第二行是这样做的,但是当我用逗号分割时,它开始写入第二行而不是当前行。另外,您有一个双逗号的事实表明列表«行»包含一个无。在您调用split后检查«row»包含的内容,以确保您没有不想要的额外内容。我看不到它可能添加的任何额外内容…是吗?如果您这样做,请指出。我尝试过:'row=“1,5,5,3”row=row.split(',')#在逗号行上拆分=[I for I in row if I!='5']。#删除5s row+=['0']*(num_columns-len(row))#将0添加到结束行=','join(row)'提供您想要的输出。这一定与上的拆分有关。\n当您从csv中读取一行时,它将为您提供整个“1,5,5,3\n”,当您使用逗号拆分时,如果提供['1','5','5','3\n']。因此,打印(转换后)列表['1','3\n','0','0','0']输出两行文本是很自然的。如果i!=“5”]正确,则需要通过将列表理解更改为[i.strip(),为行中的i添加“\n”。第二行是这样做的,但是当我用逗号分割时,它开始写入第二行而不是当前行。另外,您有一个双逗号的事实表明列表«行»包含一个无。在您调用split后检查«row»包含的内容,以确保您没有不想要的额外内容。我看不到它可能添加的任何额外内容…是吗?如果您这样做,请指出。我尝试过:'row=“1,5,5,3”row=row.split(',')#在逗号行上拆分=[I for I in row if I!='5']。#删除5s row+=['0']*(num_columns-len(row))#将0添加到结束行=','join(row)'提供您想要的输出。这一定与上的拆分有关。\n当您从csv中读取一行时,它将为您提供整个“1,5,5,3\n”,当您使用逗号拆分时,如果提供['1','5','5','3\n']。因此,打印(转换后)列表['1','3\n','0','0','0']输出两行文本是很自然的。您需要通过将列表理解更改为[i.strip()(如果i!=“5]”,则行中的i)来额外去除“\n”,您可以更新此内容以反映csv文件的使用情况吗?Thanks@xion: ?? 但是这应该已经可以工作了,而不是您自己的当前代码!在我看来,似乎没有更多的“用法”了。@usr2564301我正在读取一个csv文件。为了清晰起见,是否可以对其进行更新以反映这一点?是否简单到将“\n”替换为“,”?出现此问题的原因似乎是每行的最后一个值不是以逗号结尾。您从csv文件中读取了每一行,但每一行的最后一个值后跟“\n”not“,”。简单地在每一行上替换它可能会有所帮助。您能更新它以反映csv文件的使用情况吗?Thanks@xion: ?? 但是这应该已经可以工作了,而不是您自己的当前代码!在我看来,似乎没有更多的“用法”了。@usr2564301我正在读取一个csv文件。为了清晰起见,是否可以对其进行更新以反映这一点?是否简单到将“\n”替换为“,”?出现此问题的原因似乎是每行的最后一个值不是以逗号结尾。您从csv文件中读取了每一行,但每一行的最后一个值后跟“\n”not“,”。简单地在每行上替换它可能会有所帮助。这很有效!但是,有没有办法在982列和983列之间添加尾随的0,而不是仅在末尾添加?我想我不明白你的问题。也许一个例子会对这项工作有所帮助!但是,有没有办法在982列和983列之间添加尾随的0,而不是仅在末尾添加?我想我不明白你的问题。也许一个例子会对这项工作有所帮助!但是,有没有办法在982列和983列之间添加尾随的0,而不是仅在末尾?@xion如果有983列,索引982不会在末尾吗?列表的索引从0开始。您的意思是要在行/行的最后一个元素之前添加零吗?正确。我试图在每一行的最后一个元素之前添加零。这正是我想要达到的。非常感谢。这管用!但是,有没有办法在982列和983列之间添加尾随的0,而不是仅在末尾?@xion如果有983列,索引982不会在末尾吗?列表的索引从0开始。您的意思是要在行/行的最后一个元素之前添加零吗?正确。我试图在每一行的最后一个元素之前添加零。这正是我想要达到的。非常感谢。