Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - הקוד מדפיס תוצאות שונות שצריכות להיות חופפות

mister.david - 22/02/2019 - 22:01
נושא ההודעה: הקוד מדפיס תוצאות שונות שצריכות להיות חופפות
היי כתבתי קוד פיטון המעדכן אוטומטי את התיקייה בשרת עם הפרוטוקול FTP.
הוא מעדכן את מהתיקייה הראשית עד ל"קצה של העץ" תוך כדי השוואה בשמות.

התוצאה הראשונה נפלט מהLocal File.
התוצאה השניה נפלט מהServer File - מה שקוראים מהחיבור ftp.

לאחר השוואה ככה הוא יודע אם הקובץ קיים או לא.

כתוצאה מבעיה של עברית אני מקבל 2 תוצאות שונות:
Image

אשמח אם תוכלו לעזור לי

קוד:
#!/usr/bin/env python
# - *- coding: utf- 8 - *-

import ftplib
import time
import os

def LoginUser(host,port,username,password):
    ftp = ftplib.FTP()
    ftp.connect(host, port)
    if "220" in ftp.getwelcome():
        print "[+] Connect To Server"
        #print (ftp.getwelcome())
    try:
        ftp.login(username, password)
        print "[+] Login Connect to "+host+":"+str(port)+" - "+username
    except:
        print "[-] Login User and Password Fail"
    ftp.encoding='utf-8'
    ftp.sendcmd('OPTS UTF8 ON')
    return ftp

'''
# List Of Local Files In This Folder
'''
def ListLocalFiles(scriptpath):
    #myfileslocal = os.listdir(scriptpath)
    myfileslocal = next(os.walk('.'))[1]
    myfileslocalFiles = []
    for file in os.listdir(scriptpath):
            if "." in file:
                if file.startswith(".") != 1:
                    myfileslocalFiles.append(os.path.join("", file))
    return myfileslocalFiles
'''
# List Of Local Files In This Folder
'''
def ListLocalFolders():
    myfolderslocal = next(os.walk('.'))[1]
    return myfolderslocal
'''
# List Of Server Files In This Folder
'''
def ListServerFiles(ftp):
    myfilesServerFolder = []
    try:
        filesOnServer = ftp.nlst()
        for file in filesOnServer:
            if "." in file:
                if file.startswith(".") != 1:
                    myfilesServerFolder.append(os.path.join("", file))
        return myfilesServerFolder
    except:
        print "Not Login"
'''
# Upload File
'''

def UploadFile(filename,ftp):
    ftp.storbinary("STOR " + filename, open(filename, 'rb'))

def Diff(li1, li2):
    return (list(set(li1) - set(li2)))

'''
# Vars
'''
path = os.path.dirname(__file__)

ftp = LoginUser("localhost", 21, "user", "pass")

'''    ~     Main     ~ '''
list1 = ListLocalFolders()
flag = 0

def GetInFolder(x,ftp):
    # Get In Folder
    try:
        ftp.cwd(x)
        os.chdir(x)
    except:
        ftp.mkd(x)
        print "Error " + x + " Not Exists"
        flag = 1
        ftp.cwd(x)
        os.chdir(x)
        return 1

''' Check Folder And MKDir '''
while 1==1:
    for x in list1:
        if GetInFolder(x, ftp) == 1:
                print "done"
        # Get Files List
        pathLocal = path + "\\" + x
        listLocal = ListLocalFiles(pathLocal)
        listServer = ListServerFiles(ftp)
        print listLocal
        print listServer

        # Upload File To Folder
        listNeedToMKDir = Diff(listLocal,listServer)
        for i in listNeedToMKDir:
            #print "------------------------------"
            print "Upload:" + i
            print "To:" +x
            UploadFile(i, ftp)
            print os.getcwd()
        list2 = ListLocalFolders()
        for z in list2:
            if GetInFolder(z, ftp) == 1:
                print "done"
            listLocal2 = ListLocalFiles(pathLocal + "\\" + z)
            listServer2 = ListServerFiles(ftp)
            # Upload File To Folder
            listNeedToMKDir2 = Diff(listLocal2, listServer2)
            for z in listNeedToMKDir2:
                # print "------------------------------"
                print "Upload:" + z
                print "To:" + x
                UploadFile(z, ftp)
                print os.getcwd()
            ftp.cwd("..")
            os.chdir("..")
            time.sleep(5)
        ftp.cwd("..")
        os.chdir("..")
    time.sleep(2)

Anonymous - 23/02/2019 - 00:29
נושא ההודעה:
זה פייתון 2. תעבור ל3, יש לו תמיכה יותר טובה ביוניקוד (וב3 utf-8 הוא ברירת המחדל)

בכל מקרה נראה שהרשימה הראשונה בקידוד win1255
והשניה בקידוד utf-8

בפיתון 2:
קוד:

a="\xf9\xec\xe5\xed.txt"
b = "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d.txt"
a.decode('1255').encode('utf-8') == b

יוצא True
כל הזמנים הם GMT + 2 שעות