Τα πάντα για την Python

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 04 Οκτ 2011, 14:19

Ορίστε:

Κώδικας: Επιλογή όλων
#!/usr/bin/python3

import pickle

class Edit:

def __init__(self):
self.all_pickle_file = 'pickle_all.data'
self.open_pickle_file = 'pickle_open.data'
self.all_txt_file = 'all_files.txt'
self.open_txt_file = 'open_files.txt'
self.all_files_list = []
self.open_files_list = []
self.load_lists()

def list_append(self, name):
if not name in self.all_files_list:
self.all_files_list.append(name)
else:
print('This file name already exists!')
self.open_a_file(name)
self.save_lists()

def delete_from_list(self, name):
if name in self.all_files_list:
for i in self.all_files_list:
if i == name:
self.all_files_list.remove(i)
else:
print('There is no file with the name "{}"'.format(name))
if name in self.open_files_list:
self.open_files_list.remove(name)
self.save_lists()

def open_a_file(self, name):
if name in self.all_files_list and not name in self.open_files_list:
self.open_files_list.append(name)
elif name in self.open_files_list:
print('This file is already open!')
else:
print('There is no file with the name "{}"'.format(name))
self.save_lists()

def close_a_file(self, name):
if name in self.all_files_list and name in self.open_files_list:
self.open_files_list.remove(name)
elif not name in self.open_files_list:
print('This file is already closed!')
else:
print('There is no file with the name "{}"'.format(name))
self.save_lists()

def save_lists(self):
with open(self.all_pickle_file, 'wb') as a:
pickle.dump(self.all_files_list, a)
with open(self.open_pickle_file, 'wb') as a:
pickle.dump(self.open_files_list, a)
self.write_to_files()

def load_lists(self):
try:
with open(self.all_pickle_file, 'rb') as a:
self.all_files_list = pickle.load(a)
except IOError:
pass
try:
with open(self.open_pickle_file, 'rb') as a:
self.open_files_list = pickle.load(a)
except IOError:
pass

def write_to_files(self):
text = ''
for i in self.all_files_list:
text += i + '\n'
with open(self.all_txt_file, mode='w', encoding='utf-8') as a:
a.write(text)
text = ''
for i in self.open_files_list:
text += i + '\n'
with open(self.open_txt_file, mode='w', encoding='utf-8') as a:
a.write(text)

a = Edit()
#a.list_append('name1')
#a.list_append('name2')
#a.delete_from_list('name2')
#a.close_a_file('name1')
#a.open_a_file('name1')

Πρόσθεσα 5 γραμμές με σχόλια για να δεις πως μπορείς να το δουλέψεις. Δοκίμασε να εκτελέσεις μία μία τις γραμμές αφήνοντας κάθε φορά τις υπόλοιπες σαν σχόλια και παρατήρησε τι συμβαίνει στα δύο αρχεία.
Δημιουργεί στον κατάλογο από όπου εκτελείται το πρόγραμμα τα αρχεία "all_files.txt" και "open_files.txt" τα οποία περιέχουν τα ονόματα όλων ή των ανοιχτών μόνο φακέλων αντίστοιχα.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 04 Οκτ 2011, 14:29

θα το δουλέψω ;)
ότι και να πω είναι λίγο, ευχαριστώ :bow:
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 11 Οκτ 2011, 15:29

έκανα εγκατάσταση την 11.10 και το τρέχω και παίρνω
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "files.py", line 84, in <module>
a = Edit()
File "files.py", line 14, in __init__
self.load_lists()
File "files.py", line 63, in load_lists
self.all_files_list = pickle.load(a)
File "/usr/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 886, in load_proto
raise ValueError, "unsupported pickle protocol: %d" % proto
ValueError: unsupported pickle protocol: 3

από ότι είδα το πρόβλημα πρέπει να είναι κάτι με την Python2.7 αν και εγώ έχω την Python3...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 11 Οκτ 2011, 15:33

Πως το τρέχεις;
Έχεις:
Κώδικας: Επιλογή όλων
#!/usr/bin/python3

για shebang;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 11 Οκτ 2011, 15:35

ναι για αυτό μου φαίνεται λίγο παράξενο που αναφέρει Python 2.7
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό Ilias95 » 11 Οκτ 2011, 15:38

clepto έγραψε:ναι για αυτό μου φαίνεται λίγο παράξενο που αναφέρει Python 2.7

Εκτελείται με python2 γι' αυτό και το σφάλμα. Δοκίμασα να το τρέξω και εγώ με python2 και παίρνω ακριβώς το ίδιο σφάλμα, ενώ με python3 είναι οκ.

Πως ακριβώς το τρέχεις; Από τερματικό;
Τρέξε το σαν:
Κώδικας: Επιλογή όλων
python3.2 filename

(όπου filename το όνομα του αρχείου...)
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 11 Οκτ 2011, 16:00

όχι το τρέχω με το geany, έχει ένα κουμπί...

βασικά το τρέχω από ένα bash αρχείο
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 11 Οκτ 2011, 16:04

Ανάφερα τη λύση σε προηγούμενο ποστ: viewtopic.php?f=6&t=5094&p=210261&hilit=pickle#p210261 :)
(Φυσικά το προηγούμενο αρχείο του pickle θα πρέπει να διαγραφεί και να δημιουργηθεί ξανά.)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό clepto » 11 Οκτ 2011, 16:06

ναι ρε αλλά ο κώδικας σου δεν είναι ο ίδιος με τον κώδικα που χρησιμοποιώ που μου έχει δώσει ο Ηλίας

και δεν πρόκειται να τον βάλω να το ξαναγράψει τώρα οπότε πρέπει να βρούμε άλλη λύση :P
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

Re: Τα πάντα για την Python

Δημοσίευσηαπό medigeek » 11 Οκτ 2011, 16:10

Μα δύο γραμμές θέλουν αλλαγή.
1. Όταν διαβάζεις το αρχείο, open() με "rb":
Κώδικας: Επιλογή όλων
with open(pickle_file, "rb") as f:
pickle_dict = pickle.load(f)

2. Όταν γράφεις στο αρχείο, open() με "wb" και pickle.dump() με protocol=0:
Κώδικας: Επιλογή όλων

with open(pickle_file, "wb") as f:
pickle.dump(pickle_dict, f, protocol=0)
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι