2009-11-24 35 views
32

Tôi khá mới khi nói đến lập trình, và đã bắt đầu học python.Lặp qua các tập tin trong một thư mục

Điều tôi muốn làm là vẽ lại các sprites cho một trò chơi và tôi được cung cấp các màu gốc, theo sau là những gì chúng được chuyển thành. Mỗi sprite có từ 20 đến 60 góc, do đó, lặp qua từng cái trong thư mục cho mỗi màu có lẽ là cách để đi cho tôi. Mã của tôi cũng vậy;

import media 
import sys 
import os.path 

original_colors = str(raw_input('Please enter the original RGB component, separated ONLY by a single space: ')) 
new_colors = str(raw_input('Please insert the new RGB component, separated ONLY by a single space: ')) 
original_list = original_colors.split(' ') 
new_list = new_colors.split(' ') 
folder = 'C:\Users\Spriting\blue' 
if original_colors == 'quit' or new_colors == 'quit': 
    sys.exit(0) 
else: 
    while 1: 
     for filename in os.listdir (folder): 
      for pix in filename: 
       if (media.get_red(pix) == int(original_list[0])) and (media.get_green(pix) == int(original_list[1])) and \ 
        (media.get_blue(pix) == int(original_list[2])): 
        media.set_red(pix, new_list[0]) 
        media.set_green(pix, new_list[1]) 
        media.set_blue(pix, new_list[2]) 

        media.save(pic) 

Nhưng tôi cứ bị lỗi trên tên đường dẫn, và trên pix là một giá trị chuỗi (Họ là tất cả hình ảnh)

Bất kỳ trợ giúp đánh giá cao.

+0

Bạn có thể hiển thị thông báo lỗi cụ thể mà bạn đang nhận được không? – perimosocordiae

+0

Đây có phải là bài tập ở trường không? Tất cả kết quả tìm kiếm tôi nhận được từ Google trên mô-đun "phương tiện" của bạn dường như chỉ ra rằng đó là ... –

Trả lời

3

Đường dẫn sai vì các dấu gạch chéo ngược cần phải được tăng gấp đôi lên - dấu gạch chéo ngược là lối thoát cho các ký tự đặc biệt.

os.listdir không trả lại tệp đang mở, nó sẽ trả về tên tệp. Bạn cần mở tệp bằng tên tệp.

34

os.listdir() trả về danh sách tên tệp. Do đó, filename là một chuỗi. Bạn cần phải mở tập tin trước khi lặp lại nó, tôi đoán vậy.

Ngoài ra, hãy cẩn thận với các dấu gạch chéo ngược trong chuỗi. Chúng chủ yếu được sử dụng cho các trình tự thoát đặc biệt, vì vậy bạn cần phải thoát khỏi chúng bằng cách tăng gấp đôi chúng. Bạn có thể sử dụng hằng os.sep để được cầm tay nhiều hơn, hoặc thậm chí sử dụng os.path.join():

folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue') 
10
for pix in filename: 

lặp trên các chữ cái của tên tập tin. Vì vậy, đó chắc chắn không phải là những gì bạn muốn. Có thể bạn sẽ muốn thay thế dòng đó bằng cách:

with open(filename) as current_file: 
    for pix in current_file: 

(giả sử Python 2.6) và thụt lề phần còn lại của vòng lặp tương ứng.

Tuy nhiên, tôi không chắc chắn rằng vòng lặp for mới thực hiện những gì bạn muốn trừ khi pix bạn ngụ ý một dòng văn bản trong tệp hiện tại. Nếu các tệp là tệp hình ảnh nhị phân, trước tiên bạn sẽ cần phải đọc nội dung của chúng đúng - không đủ thông tin trong bài đăng của bạn để đoán có gì ở đây.

Các vấn đề liên quan