You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python测量PC与Android设备间文件拷贝的读写速度

实现手机与PC间文件传输测速的Python方案

核心思路

不管是哪方向的传输,核心都是记录文件传输的开始/结束时间,结合文件大小计算速度:速度 = 文件大小 / 传输耗时。具体实现分两种常见场景:手机存储挂载为PC本地磁盘,或是通过网络(WiFi/热点)传输。


场景1:手机存储挂载为PC本地磁盘

如果手机通过USB调试、MTP或USB大容量存储模式挂载成PC的本地盘符(比如Windows的E:、Linux的/mnt/phone),直接用Python内置模块即可完成测速。

示例代码(PC→手机)

import shutil
import time
import os

def measure_transfer_speed(source_path, dest_path):
    # 获取文件大小(字节)
    file_size = os.path.getsize(source_path)
    start_time = time.time()
    
    # 执行文件复制
    shutil.copy2(source_path, dest_path)
    
    end_time = time.time()
    elapsed = end_time - start_time
    
    # 转换为MB/s输出(1MB = 1024*1024字节)
    speed_mbs = (file_size / (1024*1024)) / elapsed
    print(f"传输完成!耗时:{elapsed:.2f}秒,速度:{speed_mbs:.2f} MB/s")

# 替换为你的1GB测试文件路径和手机挂载路径
measure_transfer_speed("D:/test_1gb_file.bin", "E:/test_1gb_file.bin")

补充说明

  • 1GB测试文件可快速生成:with open("test_1gb_file.bin", "wb") as f: f.write(os.urandom(1024*1024*1024))
  • MTP挂载存在系统缓存机制,建议重复3-5次测试取平均值,结果更准确。

场景2:通过网络传输(WiFi/热点)

如果是无线传输,用Python的socket模块建立TCP连接实现文件收发,无需挂载磁盘,适配iOS、安卓全平台。

方案1:PC作为服务器,手机接收文件(PC→手机)

PC端代码(发送文件并测速)

import socket
import time
import os

def pc_server(file_path, host="0.0.0.0", port=9999):
    file_size = os.path.getsize(file_path)
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(1)
    print(f"等待手机连接... 监听端口:{port}")
    
    conn, addr = server_socket.accept()
    print(f"已连接设备:{addr}")
    
    # 先发送文件大小(8字节固定长度)
    conn.sendall(file_size.to_bytes(8, byteorder='big'))
    
    start_time = time.time()
    # 分块发送文件内容
    with open(file_path, "rb") as f:
        while chunk := f.read(4096):
            conn.sendall(chunk)
    
    end_time = time.time()
    elapsed = end_time - start_time
    speed_mbs = (file_size / (1024*1024)) / elapsed
    print(f"文件发送完成!耗时:{elapsed:.2f}秒,速度:{speed_mbs:.2f} MB/s")
    
    conn.close()
    server_socket.close()

# 替换为你的1GB测试文件路径
pc_server("D:/test_1gb_file.bin")

手机端代码(接收文件并测速)

手机需安装Python环境(比如安卓用Termux),运行以下代码:

import socket
import time

def phone_client(server_ip, port=9999, save_path="/sdcard/test_1gb_file.bin"):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((server_ip, port))
    
    # 接收文件大小
    file_size_bytes = client_socket.recv(8)
    file_size = int.from_bytes(file_size_bytes, byteorder='big')
    
    start_time = time.time()
    # 分块接收文件内容
    received = 0
    with open(save_path, "wb") as f:
        while received < file_size:
            chunk = client_socket.recv(min(4096, file_size - received))
            if not chunk:
                break
            f.write(chunk)
            received += len(chunk)
    
    end_time = time.time()
    elapsed = end_time - start_time
    speed_mbs = (file_size / (1024*1024)) / elapsed
    print(f"文件接收完成!耗时:{elapsed:.2f}秒,速度:{speed_mbs:.2f} MB/s")
    
    client_socket.close()

# 替换为PC的局域网IP
phone_client("192.168.1.100")

方案2:手机作为服务器,PC接收文件(手机→PC)

只需反转上述收发逻辑:手机端监听端口并发送文件,PC端连接后接收并计时,代码结构与上述一致,调整收发顺序即可。


可选优化工具

  • tqdm:添加传输进度条,直观显示实时进度
  • psutil:监控CPU、内存占用,排除系统资源瓶颈对测速结果的干扰

内容的提问来源于stack exchange,提问作者martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:57:25