Как написать в следующем ряду, используя Python? - PullRequest
0 голосов
/ 11 августа 2011

1234 5678 9876 542 1231;2333 1234 5678 579

я хочу записать эти данные в файл csv (myfile.csv) из файла .txt (murtuz.txt), чтобы после точки с запятой он начинался со следующей строки.

Я попробовал код, упомянутый ниже, он помогает мне записывать данные в CSV-файл, но мне не удалось изменить строку после точки с запятой.

import csv  
from StringIO import StringIO
import sys

data = open("murtuz.txt","r").read()  
data1 = StringIO(data)  
print data1          
reader = csv.reader(data1, delimiter=' ',)     
for row in reader:  
    print row  

out = csv.writer(open("myfile.csv","w"), delimiter=',')  
out.writerow(row)  
sys.exit()

нужна помощь некоторых экспертов.
заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

csv.reader может принять любую итерацию в качестве ввода. В частности, вы можете кормить его линиями, полученными от генератора. Вы можете использовать этот генератор для обработки ваших входных данных - например, для разделения на точки с запятой:

input csv
input textwrap
input io

def splitter(iterable):
    for line in iterable:
        for part in line.split(';'):
            yield part.strip()

f=open("murtuz.txt","r")
# with open("murtuz.txt","r") as f:     # for Python 2.6 or better
    csvobj=csv.reader(splitter(f),delimiter=' ')
    for row in csvobj:
        print(row)
f.close()

выходы

['1234', '5678', '9876', '542', '1231']
['2333', '1234', '5678', '579']
['1234', '5678', '9876', '542', '1231']
['2333', '1234', '5678', '579']

После того, как вы установили контроль над читателем, снова легко его записать.

0 голосов
/ 11 августа 2011

Попробуйте:

full_file_txt = open("murtz.txt").read() #this is ugly and brute force
rows = full_file_txt.split(";") #split txt file into rows delim by ;
for row in rows:  
    print ",".join(row.split()) #split each row on space, and output as csv
0 голосов
/ 11 августа 2011

Согласно документам ,

Считыватель жестко запрограммирован для распознавания '\ r' или '\ n' как конца строки и игнорируетКонцаСтроки.Это поведение может измениться в будущем.

Таким образом, вы не можете сказать читателю трактовать точку с запятой как ограничитель строки.

Вы можете сделать:

Это будет работать для любого количества точек с запятой в строке.

0 голосов
/ 11 августа 2011

Я бы проанализировал строку.

newrow = str(row)
if ';' in newrow:
  fragments = newrow.split(';')
for each_fragment in fragments:
  out.writerow(each_fragment)

Будет ли это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...