2015-04-02 2 views
0

Я изучаю python и застрял в учебнике, которое, как говорится в руководстве, должно работать, но нет, я видел похожие вопросы, но не могу понять, как они применяются к коду, которым я следую, код не работает в конце последней строки.Ошибка конкатенации Python

import os 
import time 

source = ["'C:\Users\Administrator\myfile\myfile 1'"] 

target_dir = ['C:\Users\Administrator\myfile'] 

target = target_dir + os.sep + \ 
     time.strftime('%Y%m%d%H%M%S') + '.zip' 

can only concatenate list (not "str") to list 

я попробовал некоторые методы использования .append, а также изменения кода путем добавления [] и() до + «.zip», но все без толку, поэтому я надеялся, что кто-то может объяснить, почему его недостаток и как я его исправляю.

Я использую Python 2.7.9 на окнах

благодаря

+0

Какой учебник вы используете? – Kevin

+1

Почему списки 'source' и' target_dir'? –

+0

Я не уверен, что только так было закодировано учебное пособие, учебник предназначен для сценария резервного копирования, а учебник - это байт python от swaroop. – Ambush

ответ

4

target_dir не следует создавать с помощью скобок.

target_dir = 'C:\Users\Administrator\myfile' 

target = target_dir + os.sep + \ 
     time.strftime('%Y%m%d%H%M%S') + '.zip' 

Кстати, позаботьтесь с обратными косыми чертами, потому что они также используются для обозначения специальных символов в строке. Например, "c:\new_directory" будет интерпретироваться как «C двоеточие newline W ...», а не «C двоеточие обратной косой черты N W ...». В этом случае вам нужно будет слеш себя "c:\\new_directory", или использовать сырые строки как r"c:\new_directory" или регулярный косой черты (если ваша операционная система допускает, что в качестве разделителей путей), как "c:/new_directory"

+1

согласно документам источник нуждается в двойных кавычках, если в именах каталогов есть пробелы, но они также пробуют его с одинарными кавычками и все еще нет. – Ambush

+0

Лучше это 'target = os.path.join (target_dir, time.strftime ('% Y% m% d% H% M% S') + '.zip')' –

+1

@ YK2, источник 'требует двойных кавычек, действительно зависит от того, что вы делаете с ним. Например, если вы передаете его на вызов 'os.system', вам, вероятно, понадобится его. Но неправильно сказать, что «строка Python всегда требует двойных кавычек, если она содержит пробел». В какой документации вы ссылаетесь? – Kevin

2

target_dir список, так что в вашем примере вы должны сделать:

target = target_dir[0] + os.sep + \ 
     time.strftime('%Y%m%dT%H%M%S') + '.zip' 

Вы видите эту ошибку, потому что вы пытаясь добавить список (target_list) и строки вместе, яблоки и апельсины.

+0

тоже не сделал – Ambush

+0

@ YK2 нет представление какой это означает. –

+0

Я имел в виду код, который вы предложили также – Ambush

4

Вы должны использовать os.path.join() так, что правильная платформа специальный разделитель каталога всегда будет использоваться

import os 
import time 

source = "C:\Users\Administrator\myfile\myfile 1" 

target_dir = "C:\Users\Administrator\myfile" 

target = os.path.join(target_dir, time.strftime('%Y%m%d%H%M%S') + '.zip') 
+0

это не сработало в этом случае – Ambush

+0

@ YK2 Разве ваш компьютер взорвался? Разве обезьяны вылетают из экрана? Дом расплавился? Что означает «Это не работает»? –

+0

Код, который вы предложили – Ambush

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