99 lines
2.6 KiB
Python
99 lines
2.6 KiB
Python
import socket
|
|
from pathlib import Path
|
|
from smb.SMBConnection import SMBConnection
|
|
|
|
SERVER = "192.168.45.4"
|
|
SHARE = "AGILENT"
|
|
USERNAME = ""
|
|
PASSWORD = ""
|
|
CLIENT_NAME = socket.gethostname()
|
|
SERVER_NAME = SERVER
|
|
|
|
DATA_DIR = Path(__file__).parent / "data"
|
|
|
|
|
|
def _connect():
|
|
conn = SMBConnection(
|
|
USERNAME, PASSWORD,
|
|
CLIENT_NAME, SERVER_NAME,
|
|
use_ntlm_v2=True,
|
|
is_direct_tcp=True
|
|
)
|
|
if not conn.connect(SERVER, 445):
|
|
raise ConnectionError("Failed to connect to SMB share.")
|
|
return conn
|
|
|
|
|
|
def list_csv_files(server=SERVER, share=SHARE, username=USERNAME, password=PASSWORD):
|
|
"""Return a list of all .csv paths found on the share (recursive)."""
|
|
conn = _connect()
|
|
csv_files = []
|
|
|
|
def walk(path):
|
|
for entry in conn.listPath(share, path):
|
|
if entry.filename in (".", ".."):
|
|
continue
|
|
full_path = f"{path}/{entry.filename}"
|
|
if entry.isDirectory:
|
|
walk(full_path)
|
|
elif entry.filename.lower().endswith(".csv"):
|
|
csv_files.append(full_path)
|
|
|
|
try:
|
|
walk("/")
|
|
finally:
|
|
conn.close()
|
|
|
|
return csv_files
|
|
|
|
|
|
def transfer_csv_files():
|
|
"""
|
|
Copy all .csv files from the scope share to DATA_DIR,
|
|
then delete them from the scope.
|
|
Returns (copied, failed) counts.
|
|
"""
|
|
DATA_DIR.mkdir(exist_ok=True)
|
|
conn = _connect()
|
|
copied = 0
|
|
failed = 0
|
|
|
|
try:
|
|
csv_files = []
|
|
|
|
def walk(path):
|
|
for entry in conn.listPath(SHARE, path):
|
|
if entry.filename in (".", ".."):
|
|
continue
|
|
full_path = f"{path}/{entry.filename}"
|
|
if entry.isDirectory:
|
|
walk(full_path)
|
|
elif entry.filename.lower().endswith(".csv"):
|
|
csv_files.append(full_path)
|
|
|
|
walk("/")
|
|
|
|
for remote_path in csv_files:
|
|
filename = Path(remote_path).name
|
|
local_path = DATA_DIR / filename
|
|
try:
|
|
with open(local_path, "wb") as f:
|
|
conn.retrieveFile(SHARE, remote_path, f)
|
|
conn.deleteFiles(SHARE, remote_path)
|
|
print(f" TRANSFERRED: {filename}")
|
|
copied += 1
|
|
except Exception as e:
|
|
print(f" FAILED: {filename} — {e}")
|
|
failed += 1
|
|
|
|
finally:
|
|
conn.close()
|
|
|
|
return copied, failed
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(f"Transferring CSV files from \\\\{SERVER}\\{SHARE} to {DATA_DIR}...\n")
|
|
copied, failed = transfer_csv_files()
|
|
print(f"\nDone. {copied} transferred, {failed} failed.")
|