*.csv to *.txt after adding columns

Peter Otten __peter__ at web.de
Wed Sep 18 03:14:23 EDT 2013


Bryan Britten wrote:

> Hey, gang, I've got a problem here that I'm sure a handful of you will
> know how to solve. I've got about 6 *.csv files that I am trying to open;
> change the header names (to get rid of spaces); add two new columns, which
> are just the results of a string.split() command; drop the column I just
> split; and then finally export to *.txt files. Here's the code I'm using:
> 
> import os
> import csv
> 
> 
> fileHandle = 'Path/To/Data'
> varNames =
> 
'ID\tCaseNum\tDate\tTime\tBlock\tIUCR\tPrimaryType\tDescription\tLocDesc\tArrest\tDomestic\tBeat\tDistrict\tWard\tCommArea\tFBICode\tXCoord\tYCoord\tYear\tUpdatedOn\tLat\tLong\tLoc\n'
> 

You may be processing not just the .csv files, but also the .txt files from 
a previous run of your script. Remove them manually to verify my guess.
If I'm right you can (in order of my preference)

(1) write the output into another directory and also do (2)
(2) filter the input files with glob.glob("/path/to/data/*.csv") 
(3) or just add the two lines below to your current code.

> for csvFile in os.listdir(fileHandle):

      if not csvFile.endswith(".csv"):
          continue

>     outFile = open(fileHandle + os.path.splitext(csvFile)[0] + '.txt',
>     'w') 
>     inFile = open(fileHandle + csvFile, 'rb')
>     reader = csv.reader(inFile, delimiter=',')
>     rowNum = 0
>     for row in reader:
>         if rowNum == 0:
>             outFile.write(varNames)
>             rowNum += 1
>         else:
>             date, time = row[2].split()
>             row.insert(3, date)
>             row.insert(4, time)
>             row.remove(row[2])
>             outFile.write('\t'.join(row) + '\n')
>     outFile.close()
>     inFile.close()
> 
> 
> The issue I'm having is that the *.txt files I'm generating are empty. I
> assume some unraised error is being thrown, but I'm new to Python and am
> self taught, so I don't know where to look or how to troubleshoot.
> 
> When I run the code on just one file and print the output instead of
> writing it, it looks exactly like what I'd want. So I'm at a loss for
> where the problem is.
> 
> Any help is appreciated!





More information about the Python-list mailing list