Adam Eliezerov
Adam Eliezerov

Reputation: 211

Convert txt to csv python script

I have a .txt file with this inside - 2.9,Gardena CA

What I'm trying to do is convert that text into a .csv (table) using a python script:

import csv
import itertools

with open('log.txt', 'r') as in_file:
    stripped = (line.strip() for line in in_file)
    lines = (line for line in stripped if line)
    grouped = itertools.izip(*[lines] * 3)
    with open('log.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('title', 'intro'))
        writer.writerows(grouped)

The output I get in the log.csv file is - title,intro,tagline

What I would want the log.csv file to show is:

title,intro
2.9,Gardena CA

Upvotes: 21

Views: 188632

Answers (5)

Filippo Durão
Filippo Durão

Reputation: 1

In python version 3.x, the intertools.izip is not operate.

The functional code for Python 3 is:

import csv
import zlib

with open('output.txt', 'r') as in_file:
    lines = in_file.read().splitlines()
    stripped = [line.replace(","," ").split() for line in lines]
    grouped = zip(*[stripped]*1)
    with open('teste.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('A', 'B', 'C', 'D'))
        for group in grouped:
            writer.writerows(group)

Upvotes: 0

Kit Stark
Kit Stark

Reputation: 231

import pandas as pd
df = pd.read_fwf('log.txt')
df.to_csv('log.csv')

Upvotes: 23

iun1x
iun1x

Reputation: 1093

This is how I do it:

 with open(txtfile, 'r') as infile, open(csvfile, 'w') as outfile:
        stripped = (line.strip() for line in infile)
        lines = (line.split(",") for line in stripped if line)
        writer = csv.writer(outfile)
        writer.writerows(lines)

Hope it helps!

Upvotes: 3

rodmartinez
rodmartinez

Reputation: 21

I suposse this is the output you need:

title,intro,tagline

2.9,Gardena,CA

It can be done with this changes to your code:

import csv
import itertools

with open('log.txt', 'r') as in_file:
    lines = in_file.read().splitlines()
    stripped = [line.replace(","," ").split() for line in lines]
    grouped = itertools.izip(*[stripped]*1)
    with open('log.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('title', 'intro', 'tagline'))
        for group in grouped:
            writer.writerows(group)

Upvotes: 2

Tom Yates
Tom Yates

Reputation: 921

You need to split the line first.

import csv

with open('log.txt', 'r') as in_file:
    stripped = (line.strip() for line in in_file)
    lines = (line.split(",") for line in stripped if line)
    with open('log.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('title', 'intro'))
        writer.writerows(lines)

Upvotes: 48

Related Questions