2017-01-05 7 views
1

Мой английский может быть плохим, поэтому извинитеЦикл Python возвращает только последнее значение

HI. У меня есть некоторые проблемы с циклом питона. Мой скрипт учитывает все будние дни между двумя датами и в течение каждого дня копирует весь текст из x.txt в textfile.txt, вставляя дату в начале текста. x - несколько текстовых файлов, пронумерованных от 1 до n. Например, дата начала составляет 1,1,2017, дата окончания - 5,1,2017. 1.txt содержит aaa, 2.txt - bbb, 3.txt - ccc и т. Д. Выходной файл должен быть:

2017-01-02 (because 1 January is Sunday which is weekend) 

aaa 

2017-01-03 

bbb 

2017-01-04 

ccc 

2017-01-05 

ddd 

Но, похоже,

2017-01-05 

aaa 

2017-01-05 

bbb 

2017-01-05 

ccc (only 3 files are processed, should be 4 and only last date is inserted everywhere) 

Я добавил print n пытается проследить, где проблема, и после того, как for x in range (1, n): это дает мне

2 
3 
3 
4 
4 
4 

Вот мой код:

# -*- coding: utf-8 -*- 
from datetime import datetime 
from datetime import timedelta 
import shutil 
import os 


def dc(d1, m1, y1, d2, m2, y2): 
    start = datetime(y1, m1, d1) 
    end = datetime(y2, m2, d2) 
    delta = timedelta(days=1) 
    d = start 
    n = 1 
    weekend = ([5, 6]) 
    while d <= end: 
     if d.weekday() not in weekend: 
      with open('textfile.txt','wb') as destination: 
       for x in range (1, n): 
        print n 
        with open(str(x) + '.txt','rb') as source: 
         destination.write(str(d)[:10]) 
         destination.write(os.linesep) 
         shutil.copyfileobj(source, destination) 
         destination.write(os.linesep*2) 
     n += 1 
     d += delta 

dc(1,1,2017,5,1,2017) 

Итак, главный вопрос: как мне заставить это работать, как планировалось?

И некоторые другие вопросы

  1. Как я могу хранить входные данные в другой форме? Наличие 30 текстовых файлов для меня в порядке, но в будущем я хочу выбрать источник ввода, и, имея 5 папок с 30 файлами в каждом из них, будет сложно их организовать. Может быть, я могу использовать списки или что-то еще?

  2. Как я могу переформатировать дату, которая написана в выходном файле? yyyy-mm-dd в порядке, но я предпочитаю dd-mm-yyyy

  3. этот скрипт будет работать с n = 30 в большинстве случаев, но если n < 30, мне бы хотелось, чтобы последние 5 скопированных файлов всегда были будет 25.txt-30.txt Буду рад услышать любые предложения. спасибо за помощь

+1

Исправьте углубление в коде. Сейчас это неправильно. – Psytho

ответ

0

Вы должны использовать либо цикл «while», либо цикл «for».

x = 0 
with open('textfile.txt','wb') as destination: 
    while d <= end: 
     if d.weekday() not in weekend: 
      with open(str(x) + '.txt','rb') as source: 
       #<Do your stuff> 
      #Next line will not skip any file 
      x += 1 
     #if you want to skip files as you move, use next line (remove '#') and remove the above line. 
     #x+=1 
     delta+=1 

P.S. Я не уверен, что если оставить ваши файлы открытыми, это создаст любую проблему, т.е. программисты обычно закрывают свои файлы после использования.

Счастливое кодирование!

+0

Спасибо! Я попробую это – Alex

+0

Пожалуйста, исправьте свой отступ Ajay –

+0

К сожалению, я не могу выполнить эту работу. возможно, мне нужно переписать код другим способом. – Alex

Смежные вопросы