2013-05-04 34 views
6

Tôi đã tự hỏi nếu nó có thể làm cho một lớp lót với pyp có chức năng tương tự như thế này.Python một lớp lót (chuyển đổi perl thành pyp)

perl -l -a -F',' -p -e'if ($. > 1) { $F[6] %= 12; $F[7] %= 12;$_ = join(q{,}, @F[6,7]) }' 

này có trong một dấu phẩy tách ra danh sách các số với 8 số trên mỗi dòng và đầu ra nó trong định dạng tương tự, ngoại trừ hai số cuối cùng trong mỗi dòng được rút gọn theo modulo 12. Nó cũng kết quả đầu ra dòng đầu tiên (tiêu đề dòng) nguyên văn đầu tiên.

Tôi có khá nhiều trong số này là một trong những lớp lót một chiều mơ hồ và tôi muốn trong trường hợp đầu tiên dịch tất cả chúng sang python.

+4

Huh, tôi không bao giờ biết về pyp. Có vẻ hữu ích. – Blender

+2

Bạn có thể cho thấy những gì bạn đã thử trong việc thực hiện điều này trong pyp và bạn đã nhận được bao xa? Bạn có bị mắc kẹt trên một cái gì đó đặc biệt? – kojiro

+0

+1 Để giới thiệu tôi với pyp! – SethMMorton

Trả lời

4

Để lưu nội dung, tôi không chắc chắn tôi có chấp thuận hay không. Viết mã theo chiều ngang không có vẻ với tôi tốt hơn nhiều so với viết nó theo chiều dọc, và - một cách thân thiện - Tôi là một chút hoài nghi này cung cấp như nhiều lợi thế trong thực tế như nó có vẻ. Một trong những niềm vui của Python là bạn không còn phải lo lắng về việc viết GolfScript nữa.

Điều đó nói rằng, làm thế nào về:

pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm" 

trong đó sản xuất:

localhost-2:coding $ cat exam.pyp 
a,b,c,d,e,f,g,h 
11,22,33,44,55,66,77,88 
12,23,34,45,56,67,78,89 
13,24,35,46,57,68,79,80 
localhost-2:coding $ cat exam.pyp | pyp "mm | p if n==0 else (p[:-2] + [(int(x)%12) for x in p[-2:]]) | mm" 
a,b,c,d,e,f,g,h 
11,22,33,44,55,66,5,4 
12,23,34,45,56,67,6,5 
13,24,35,46,57,68,7,8 

[Disclaimer:. Đây là lần đầu tiên pyp chương trình của tôi, mà tôi đã tải về khoảng mười phút trước]

+0

Có điều gì đó thực sự bị phá vỡ về tốc độ của một lớp lót này. Đối với một tệp có 500000 giây, dòng perl mất <2 giây. Dòng pyp dường như chưa bao giờ kết thúc. Nó hoạt động tốt trên các tập tin rất nhỏ. – marshall

+0

Tôi vừa tạo một tệp thử nghiệm lớn với j trong xrange (500000): in ",". Nối (str (i) cho i trong [random.choice (xrange (1000)) cho i in xrange (8)]) – marshall

+0

Đã đăng câu hỏi riêng biệt http://stackoverflow.com/questions/16378512/python-one-liner-converting-perl-to-pyp. – marshall

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