Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 5, 2016 19:54:09

kopevgale
Зарегистрирован: 2016-09-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

Количество строк в файле - N . Надо, чтобы стало количество файлов- N,
при этом в содержании файла 1 будет строка 1 из первичного файла,
в содержании файла 2 будет строка 2 из первичного файла,
в содержании файла N будет строка N из первичного файла.

Количество строк известно, как понимаю, надо зациклить создание файлов и добавление в них строк,
укажите направление. Пока есть вот что:

F = open('C:\Users\Tesha\Documents\cat2.txt')
line = F.readline()
print line
line = F.readline()
print line

это выводит мне первую и вторую строки в файле:
fewgawerg

dfewfwrg

Надо теперь придать значение этих строк переменным, как я понимаю, и внести в создаваемые файлы, чтобы название файлов были = названиям строк.
Не могу понять, как работать с двумя открытыми файлами (один исходный, а второй создаваемый, куда вносится инфа и потом он закрывается, дале открывается следующий для следующей строки)

Отредактировано kopevgale (Сен. 5, 2016 19:56:00)

Офлайн

#2 Сен. 5, 2016 20:20:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

Сделай функцию, которая принимает строку и делает по ней файл. А потом просто перебираешь строки из первого файла и передаёшь в функцию.



Офлайн

#3 Сен. 5, 2016 21:06:53

kopevgale
Зарегистрирован: 2016-09-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

F = open('C:\Users\Tesha\Documents\cat2.txt')
line = F.readline()
print line
line = F.readline()
print line


def Elevator(name, text):
name = open(w“C:\Users\Tesha\Documents\/” ,line “.txt”) # присваиваю строку имени нового файла.

пишет неправильный синтаксис. Но ведь вот ^ это (/") надо чтобы экранировать кавычки и слеш, в чем ошибко?

Офлайн

#4 Сен. 5, 2016 21:59:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

Используй теги кода

[code python][/code]
Иначе движок стирает многие важные символы из приводимого кода.



Отредактировано py.user.next (Сен. 5, 2016 22:00:03)

Офлайн

#5 Сен. 6, 2016 00:01:40

kopevgale
Зарегистрирован: 2016-09-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

http://pastebin.com/SRkjEa3d

 F = open('C:\Users\Tesha\Documents\cat2.txt')        
line = F.readline()                                    
print line                                             # смотрю выдает ли первую строку
line = F.readline()                                    
print line                                              # смотрю выдает ли вторую строку
 
 
def Elevator(name, text):                              
name = open(w"C:\Users\Tesha\Documents\/" ,line ".txt") # присваиваю строку имени новому файлу.

Офлайн

#6 Сен. 6, 2016 03:14:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

У функции Elevator пропали пробелы в теле. И там указан символ w перед строкой, тогда как там могут стоять только символы r b f и u иногда.
python.org. dev. string literal



Отредактировано py.user.next (Сен. 6, 2016 03:18:18)

Офлайн

#7 Сен. 6, 2016 12:51:18

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

 def record(name, text):
    file_name = str(name)+'.txt'
    with open(file_name, 'w') as f:
        f.write(text)
with open('filename.txt') as f: # 'filename.txt'-ваш первый файл
    file_list_1 = f.readlines()
for name, text in enumerate(file_list_1):
    record(name+1, text)

Отредактировано marvellik (Сен. 6, 2016 12:52:19)

Офлайн

#8 Сен. 6, 2016 13:29:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

marvellik
  
def record(name, text):
    file_name = str(name)+'.txt'
    ...
Не очень хорошо сделано. Если подаёшь имя файла в функцию, то оно уже должно быть сформировано полностью снаружи (формирователем имени). Так можно имя разными способами формировать, а сохраняться данные будут одним и тем же образом. А так, если надо заменить, например, .txt на .dat, ты уже должен редактировать функцию, чего не должно быть.



Отредактировано py.user.next (Сен. 6, 2016 13:31:43)

Офлайн

#9 Сен. 6, 2016 17:26:09

kopevgale
Зарегистрирован: 2016-09-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

для самопонимания прокомментю, если ошибаюсь, правьте.

  def record(name, text):                                 
    file_name = str(name)+'.txt'                       # создание имени в пресловутых файлов, name как строка
    with open(file_name, 'w') as f:                    # создание файла собсно
        f.write(text)                                           # запись в файл
with open('filename.txt') as f: # 'filename.txt'-ваш первый файл
    file_list_1 = f.readlines()
for name, text in enumerate(file_list_1):              
    record(name+1, text)                                  # все следующие файлы будут name+1 ?

Офлайн

#10 Сен. 6, 2016 19:47:34

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Количество строк - N . Надо, чтобы стало количество файлов- N

py.user.next
Не очень хорошо сделано.
согласен.спасибо учту.учусь на своих ошибках. но тогда вопрос а если у меня таких вызовов функции во всем коде штук 50 будет то чтоб изменить расширение мне нужно будет по всему коду бегать менять? мне кажется проще в функции раз изменить.наверно проще в функцию подавать имя, расширение а в функции формировать имя файла с расширением.
kopevgale
для самопонимания прокомментю
вообщем то да но как заметил quote=py.user.next действительно в функцию нужно подавать готовое имя
   def record( name, expansion, text): 
    file_name =  '{}.{}'.format(name, expansion)  # или    file_name = name+'.'+ expansion                                          
    with open(file_name, 'w') as f:                  
        f.write(text)                                         
with open('filename.txt') as f: # 'filename.txt'-ваш первый файл
    file_list_1 = f.readlines() # получаем список строк из файла
expansion = 'txt' # задаем расширение будущих файлов
for name, text in enumerate(file_list_1): 
# name это индекс элемента (строки) из списка строк из файла, text-сама строка
    name = str(name+1) #преобразуем число в строку и подаем как имя в функцию        
    record(name, expansion, text)

Отредактировано marvellik (Сен. 6, 2016 19:48:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version