Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python форматирование текста при записи в CSV / 25 сообщений из 43, страница 1 из 2
22.04.2013, 17:18
    #38235429
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
Всем здравствуйте, до этого разбирал как в csv создать и записать данные все обьяснили помогли, спасибо большое. Вот теперь столкнулся проблемой как их теперь отформатировать при записи в файл.

есть такой код
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  print 'Profile Name: %s' % results.get('profileInfo').get('profileName')
  print
  output = []
  for header in results.get('columnHeaders'):
    output.append('%25s' % header.get('name'))
  print ''.join(output)
  if results:
    if results.get('rows'):
        for row in results.get('rows'):
            output = []
            for cell in row:
                output.append('%25s' % cell)
            print ''.join(output)
   
            print 
    else:
        print 'no'
  else:
    print 'No results found'



тоесть в cmd мне выводится все красиво в табличке в столбиках и в ряд со значениями, как бы мне это все красиво записать в CSV
Этот код показывает что у меня насчитала функция(result) там большой массив данных с которого выбирает определенные нужные параметры
тоесть когда я делаю
writer.writrow([result])
то у меня получется длинная сторочка в файле состоящая из всего массива инфы,

Вот собственно вопрос какбы мне его отформатировать тоетсь чтоб там были столбики строчки ну так же как оно print ит в cmd
или дайте пожалуйста ссылочку где есть примеры почитать об этом, гуглил блин и не где как иммено форматировать выводимый результат в csv не нашел
...
Рейтинг: 0 / 0
23.04.2013, 14:14
    #38236607
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
CSV - Comma-Separated Values, намёк понятен?
...
Рейтинг: 0 / 0
23.04.2013, 14:41
    #38236662
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMFCSV - Comma-Separated Values, намёк понятен?

не совсем, можно для вообще затянутых?
PS: мне бы хоть кусочки кода в качестве примеров)
...
Рейтинг: 0 / 0
23.04.2013, 15:06
    #38236730
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
LamerO4ek,

результат записывается в одну строчку по причине того, что по тексту отсутствуют разделители csv формата:

http://ru.wikipedia.org/wiki/CSV

т.е. текст:
Код: python
1.
2.
3.
1997,Ford,E350,"ac abs moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1996,Jeep,Grand Cherokee,"MUST SELL! air moon roof loaded",4799.00



=

1997FordE350"ac abs moon"3000.001999Chevy"Venture ""Extended Edition"""""4900.001996JeepGrand Cherokee"MUST SELL! air moon roof loaded"4799.00

для того чтобы результирующий csv файл представлял данные в виде таблицы, а не строки, необходимо добавить переносы и разделители.
...
Рейтинг: 0 / 0
23.04.2013, 18:53
    #38237204
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMF,
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   csv_write = csv.writer(csv_create, delimiter=' ', skipinitialspace=True, doublequote=False, quoting=csv.QUOTE_NONE, lineterminator='', escapechar=' ') 
    
    for header in results.get('columnHeaders'):    
        csv_write.writerow('%25s' % header.get('name')) #
                                                                            #
    if results:                                                            #
        if  results.get('rows'):                                         #
            for row in results.get('rows'):                            #
                                                                               #
                for cell in row:                                           #  Все это у меня записывается почему-то в одну строчку и ячейку
                    csv_write.writerow( '%25s' % cell)           #как записать каждое значение в другую ячейку и не стройкой а
            else:                                                          # табличкой я так понял тут связано с lineterminator но он редактирует
                csv_write.writerow('no')                            # всю строку а мне надо чтобы все побило по разным ячейкам
        else:                                                              # вот такая вот хрень..=(
                csv_write.writerow('no')                    #                
    csv_create.close()                                       #
                                                                   #
...
Рейтинг: 0 / 0
23.04.2013, 19:03
    #38237224
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
LamerO4ekBadMF,
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   csv_write = csv.writer(csv_create, delimiter=' ', skipinitialspace=True, doublequote=False, quoting=csv.QUOTE_NONE, lineterminator='', escapechar=' ') 
    
    for header in results.get('columnHeaders'):    
        csv_write.writerow('%25s' % header.get('name')) #
                                                                            #
    if results:                                                            #
        if  results.get('rows'):                                         #
            for row in results.get('rows'):                            #
                                                                     #
                for cell in row:                                 #  как сделать таблицей разобрался не могу понять как сделать чтоб
                    csv_write.writerow( '%25s' % cell) 
                csv_write.writerow('\n')                     # все значения были каждый в разной ячейке, а то все получились
            else:                                                          # в первых ячейках строчками
                csv_write.writerow('no')                            # 
        else:                                                              # 
                csv_write.writerow('no')                    #                
    csv_create.close()                                       #
                                                                   #
...
Рейтинг: 0 / 0
24.04.2013, 09:44
    #38237612
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
Код: python
1.
delimiter=' '

в чём смысл этого параметра в курсе?
убери его и будет тебе счастье.
...
Рейтинг: 0 / 0
24.04.2013, 09:45
    #38237615
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMF
Код: python
1.
delimiter=' '

в чём смысл этого параметра в курсе?
убери его и будет тебе счастье.

http://pymotw.com/2/csv/#dialect-parameters
изучи сначала зачем эти параметры при создании writer'а нужны, потом используй.
...
Рейтинг: 0 / 0
24.04.2013, 09:51
    #38237625
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
хотя скорее всего у тебя локаль на компе русская и соответственно и МС офис русский, тебе delimiter надо не "," а ";".
попробуй:

Код: python
1.
delimiter=';'
...
Рейтинг: 0 / 0
24.04.2013, 11:33
    #38237815
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMFхотя скорее всего у тебя локаль на компе русская и соответственно и МС офис русский, тебе delimiter надо не "," а ";".
попробуй:

Код: python
1.
delimiter=';'



я пробывал при

delimiter=';'

получается каждый символ тогда в отдельной ячейке тоесть к примеру
test(отдельная ячейка) new(отдельная ячейка)
1111(отдельная ячейка) 222(отдельная ячейка) так должно быть нормально, а получается


t(отдельная ячейка) e(отдельная ячейка) s t n e w
1(отдельная ячейка) 1(отдельная ячейка) 1 1 2 2 2

или вообще

(test new)одна ячейка
(1111 222) одна ячейка

вот такая вот беда

delimiter=' ' - пареметр ставит разделение между символами без него у меня все через запятую получается
...
Рейтинг: 0 / 0
24.04.2013, 11:53
    #38237878
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
всё верно, это потому, что ваша переменная row равна строке из справочника rows которую вы разбиваете посимвольно cell и записываете каждый символ как значение ячейки.

Таким образом выражение:
Код: python
1.
2.
for cell in row:                                 #  как сделать таблицей разобрался не могу понять как сделать чтоб
                    csv_write.writerow( '%25s' % cell)


в вашем коде не делает ничего полезного можете замениить его выражением
Код: python
1.
csv_write.writerow( '%25s' % row) 


и получите то же самое только без пробелов

Вам нужно разобрать строку row на интересующие вас компоненты и потом уже записывать в cvs файл.
...
Рейтинг: 0 / 0
24.04.2013, 12:12
    #38237926
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
предвидя ваш вопрос про то как выделить из строки нужные компоненты, отвечаю:
используйте string =)

Код: python
1.
2.
3.
4.
5.
6.
import string
...
for row in results.get('rows'):
    result_row = row.replace('<регулярное выражение>' , ';') #тут как вы понимаете, необходимо найти повторяющиеся элементы не несущие смысловой нагрузки позволяющие выделить смысловые элементы строки и заменить их на разделитель ячеек, в итоге результирующая строка будет уже содержать необходимые вам разделители и её можно смело записывать в файл.
    csv_write.writerow( '%25s' % result_row ) 
...
...
Рейтинг: 0 / 0
24.04.2013, 12:13
    #38237933
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
а можно делать по другому, в строке искать необходимую вам подстроку и передавать её в качестве переменной на запись.
...
Рейтинг: 0 / 0
24.04.2013, 12:55
    #38238034
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMFпредвидя ваш вопрос про то как выделить из строки нужные компоненты, отвечаю:
используйте string =)

Код: python
1.
2.
3.
4.
5.
6.
import string
...
for row in results.get('rows'):
    result_row = row.replace('<регулярное выражение>' , ';') #тут как вы понимаете, необходимо найти повторяющиеся элементы не несущие смысловой нагрузки позволяющие выделить смысловые элементы строки и заменить их на разделитель ячеек, в итоге результирующая строка будет уже содержать необходимые вам разделители и её можно смело записывать в файл.
    csv_write.writerow( '%25s' % result_row ) 
...



эммм... вместо <регулярное выражение> можно поставить пробел правильно? он не несет смысловой нагрузки и его можно заменить на разделитель ячеек.

у меня выдает ошибку
AttributeError: 'list' object has no attribute 'replace'
...
Рейтинг: 0 / 0
24.04.2013, 14:09
    #38238207
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
row = ''.join(row)
...
Рейтинг: 0 / 0
24.04.2013, 14:16
    #38238226
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
LamerO4ek,

Спасибо большое, при большое =))) порешал
поставил ; в каждом записи
csv_write.writerow( '%s;' % row )
пишет теперь в отдельные ячейки,
теперь собственно назрел вопрос точнее 2 как сделать чтобы ячейки в которые я записал расстынулись, ну можно и чтоб отцентровались по длине записи чтоб при открытии было красиво видно, а то все обрезаное и не читабельное пока не по растягиваешь их это первый.

а второй вопрос
csv_write.writerow( '%s;' % cell) - здесь когда я записываю значение получаются числа и вообщим у них много знаков после запятой
как бы их обрезать чтобы только целая часть выводилась к приверу выводится 8.123489789658899 чтобы было просто 8
...
Рейтинг: 0 / 0
24.04.2013, 14:25
    #38238249
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
к Питону это мало отношение имеет =)

1 - никак, csv формат не для этого предназначен, красивости в xls делайте
2 - замените . после 8 на ,
...
Рейтинг: 0 / 0
24.04.2013, 14:28
    #38238258
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
по второму неверно я написал, форматируйте экселем формат ячеек, или пользуйтесь вторым методом записи в csv ( 14223131 ), его я объяснять не буду, он сложнее.
...
Рейтинг: 0 / 0
24.04.2013, 14:59
    #38238350
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMF,

Спасибо огромное помог выручил, не пришло и 2 месяца я все-таки склепал приложение(кривое правда, но первое все-таки), спасибо большое за помощь
...
Рейтинг: 0 / 0
24.04.2013, 17:08
    #38238648
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
Да еще такой вопросик, не хочет создавать питон у меня папки такого плана http://test.ru//
просто не создает и все это как-то лечится?

Код: python
1.
os.makedirs('D:/Work/GA API/MainProject/test//%s//%s' % (date_,webproperty.get('name'))) 


date_ это дата папка создается
webproperty.get('name') там адресс домен с таким названием дальше создаваться не хочет ((
...
Рейтинг: 0 / 0
24.04.2013, 17:19
    #38238687
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
заменять символы в строке вы уже умеете, ну так и замените ":" в урле...
...
Рейтинг: 0 / 0
24.04.2013, 17:20
    #38238693
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
проблема то на поверхности, попробовали бы сначала руками такую папку создать...
...
Рейтинг: 0 / 0
24.04.2013, 18:10
    #38238830
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
BadMFпроблема то на поверхности, попробовали бы сначала руками такую папку создать...
блин и действительно все оказалось так просто позаменял и создалось все красиво, а если у меня папки создаются в разных циклах и функциях можно путь обозначить переменно чтобы потом использовать в другой функции

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
            id_web = webproperty.get('id')
            name = webproperty.get('name')
            name = name.replace(':','')
            name = name.replace('/','')
            name = name.replace('http','')
            name = name.replace('www','')
            name = name.replace('.','', 1)
                      
            os.makedirs('D:/Work/GA API/MainProject/test//%s//%s' % (date_,name)) # можно это обозвать какой-то переменной и потом к ней  уже досоздавать папки в другой функции или надо ее сделать отдельной функцией чтобы можно было вызвать потом в другой 
...
Рейтинг: 0 / 0
24.04.2013, 21:31
    #38239100
LamerO4ek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
тоесть у меня такая проблема есть несколько функций они все друг с другом связаны, в одной 3 цикла друг в друге вот это
os.makedirs('D:/Work/GA API/MainProject/test//%s//%s' % (date_,name))
я получаю в одном из циклов( получаю name) причем во втором и это можно взятьтолко там к сожалению
дальше они прокручиваются и в конце функции с циклами выдают число которое используют следующая функция и уже из того что навыполняет следующая функция я получаю данные с которых вытягиваю ээти значения

Код: python
1.
os.makedirs('D:/Work/GA API/MainProject/test//%s//%s_' % (date_,results.get('profileInfo').get('profileName')))



так вот как бы мне создавать папку в последней функции с именем которое я получаю в другой функции в одном из циклов

тоесть вот как должно быть
Код: python
1.
os.makedirs('D:/Work/GA API/MainProject/test//%s//!!!NAME!!!//%s_' % (date_,!!!!name!!!!,results.get('profileInfo').get('profileName')))



снизу куски всего кода скинул что было понятнее если что
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
def main(argv):
    
    service = sample_utils.initialize_service()
    profile = get_profile_id(service)
    for profile_id in profile:
        print profile_id

        if profile_id:
            
                results = get_results(service, profile_id)

            
                print_results(results)

def get_profile_id(service):
    accounts = service.management().accounts().list().execute()
    account_list = accounts.get('items')
    account_list = account_list[4:5]
    for account in account_list:
        time.sleep(0.025)
        id = account.get('id')
        webproperties = service.management().webproperties().list(accountId=id).execute()
        webproperties = webproperties.get('items')

        
        for webproperty in webproperties:
            id_web = webproperty.get('id')
            name = webproperty.get('name')

            try:
                os.makedirs('D:/Work/GA API/MainProject/test//%s//%s' % (date_,name)) # вот это надо как-то всунуть в функцию def print_results(results)
            except OSError:
                pass
            finally:
       
                
                profiles = service.management().profiles().list(accountId=id,webPropertyId=id_web).execute()
                profiles = profiles.get('items')
                for profile in profiles:
                    profile = profile.get('id')
                    yield profile №все что мы дальше получаем вытягивается спомощью айди что тут вытянулся

def get_results(service, profile_id):
    return service.data().ga().get( ).execute()

def print_results(results):
    os.makedirs('D:/Work/GA API/MainProject/test//%s//%s' % (date_,results.get('profileInfo').get('Name'))) # вот сюда


вот собственно код не весь но основное что связано с моим вопросом тут есть помогите пожалуйста это послений штрих которого не хватает, хотябы примерно что надо сделать может какого то рода ссылку или чтобы переменная были видна вне этой функции, Спасибо огромное и так очень помогли.
...
Рейтинг: 0 / 0
25.04.2013, 10:30
    #38239532
BadMF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python форматирование текста при записи в CSV
LamerO4ekBadMFпроблема то на поверхности, попробовали бы сначала руками такую папку создать...
блин и действительно все оказалось так просто позаменял и создалось все красиво, а если у меня папки создаются в разных циклах и функциях можно путь обозначить переменно чтобы потом использовать в другой функции



Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            id_web = webproperty.get('id')
            name = webproperty.get('name')
            name = name.replace(':','')
            name = name.replace('/','')
            name = name.replace('http','')
            name = name.replace('www','')
            name = name.replace('.','', 1)
            full_name = os.path.join('D:/Work/GA API/MainProject/test//' + name) #передавайте эту переменную куда хотите.
                      
            os.makedirs(full_name) 
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python форматирование текста при записи в CSV / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]