将CSV转换为txt并使用Python每10个值开始换行

时间:2013-02-11 20:41:19

标签: python file text csv split

我有一个csv文件,其值为324行和495列。每行和col的所有值都是相同的。

我需要拆分这个数组,以便每10个值放入一个新行。因此,对于324行中的每一行,将有49个具有10个值的完整列和具有5个值的1个列(495个col / 10个值= 49个具有10个值的新行和1个具有5个值的新行)。然后转到下一行,依此类推324行。

我遇到的麻烦如下:

  1. line.split(“,”)似乎没有做任何事情
  2. line.split之后的所有内容似乎都没有做任何事情
  3. 我不确定我的新范围......是否正确
  4. 我还没有把写输出放到文本文件中,我认为它应该是outFile.write(有些东西在这里,不知道是什么)
  5. 我在打印声明后放了“\ n”,但它只打印出来
  6. 我是初学程序员。

    脚本:

    import string
    import sys
    
    # open csv file...in read mode
    inFile= open("CSVFile", 'r')
    outFile= open("TextFile.txt", 'w')
    
    
    for line in inFile:
        elmCellSize = line.split(",")
        for newrow in range(0, len(elmCellSize)):
            if (newrow/10) == int(newrow/10):
                print  elmCellSize[0:10]   
    
    outFile.close()
    inFile.close()
    

2 个答案:

答案 0 :(得分:0)

你应该真的使用csv模块,但无论如何我都可以提供一些建议。

您遇到的一个问题是,当您说print elmCellSize[0:10]时,您总是会考虑前10个元素,而不是最近的10个元素。根据您的想法,您可以保留一个字符串以记住最近的10个元素。在提到您可以使用代码修复的一些内容之后,我将在下面显示一个示例。

首先请注意line.split(',')返回一个列表。因此,您对变量名称elmCellSize的选择有点误导。如果你说lineList = line.split(',')它可能更有意义吗?或者,如果您要说lineSize = len(line.split(','))并使用它?

另外(虽然我对Python 2.x一无所知)我认为xrange是Python 2.x的一个函数,它比range更有效,尽管它的工作方式完全相同方式。

您可以实际说if (newrow/10) == int(newrow/10),而不是说if index % 10 == 0,以检查索引是否是10的倍数。%可以被认为是'余数',所以它会给出newrow的剩余部分除以10。 (例如:5%10 = 5; 17%10 = 7; 30%10 = 0)

现在不打印[0:10],而是始终打印前10个元素,而是要从当前索引打印10个空格。所以你可以说print lineList[index-10:index]来打印最近的10个元素。

最后你会有像

这样的东西
...
lineList = line.split(',') # Really, you should use csv reader
# Open the file to write to
with open('yourfile.ext', 'w') as f:
    # iterate through the line
    for index, value in enumerate(lineList):
        if index % 10 == 0 and index != 0:
            # Write the last 10 values to the file, separated by commas
            f.write(','.join(lineList[index-10:index]))
            # new line
            f.write('\n')
            # print
            print lineList[index-10:index]

我当然不是专家,但我希望这有帮助!

答案 1 :(得分:0)

好吧,我想这个脚本几乎可以工作。

现在的问题是它在第49行之后停止写入outFile。它为49行创建了10列,但是应该有第50行只有5列,因为CSV文件中的每一行都是495列。因此,当前脚本将最后10个值写入新行49次,但它没有得到额外的5.另外,由于原始CSV文件有324行,因此必须再执行323次。

所以,我认为问题现在可能在最后的if语句中,可能需要else语句,但我的elif语句没有做任何事情。我希望它说如果列表中的第6个值是行尾字符('\ n'),那么将列表prioir中的5个值写入行尾...它不起作用。

感谢迄今为止的所有帮助,我很感激!

这是脚本:

import string
#import sys
#import csv

# open csv file...in read mode
inFile= open("CSVFile.csv", 'r')
outFile= open("TextFile.txt", 'w')



for line in inFile:
    lineList = line.split(',') # Really, you should use csv reader
# Open the file to write to
    with open('outFile', 'w') as outFile:
        # iterate through the line
        for index, value in enumerate(lineList):
            if index % 10 == 0 and index != 0:
                # Write the last 10 values to the file, separated by space
                outFile.write('\t'.join(lineList[index-10:index]))
                # new line
                outFile.write('\n')
                # print
                print lineList[index-10:index]
elif lineList[6] == '\n':
            # Write the last 5 values to the file, separated by space
                outFile.write(' '.join(lineList[index-5:index]))
                # new line
                outFile.write('\n')
                # print
                print lineList[index-:index]

outFile.close()
inFile.close()