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

如何修复Python中'str'对象无'write'属性的AttributeError错误?

修复Python代码中的'str' object has no attribute 'write'错误

问题代码

def separate (gpsTrackPoints,gpsTrackPointsReorg):
    trackPoints = open (gpsTrackPoints,"r")
    trackPointsReorg = open (gpsTrackPointsReorg,"w")
    trackPoints.readline()
    lines = trackPoints.readlines()
    for line in lines:
        parts = line.split(",")
        pointID = parts[0]
        long = parts[1]
        lat = parts[2]
        alt = parts[3]
        dateTime = parts[4]
        dateTimeSplit = line.split("-")
        dateStr = dateTimeSplit[0]
        timeStr = dateTimeSplit[1]
        reOrg = ("pointID:{}, longitude:{}, latitude:{}, altitude:{}, date:{}, time:{}".format(pointID,long,lat,alt,dateStr,timeStr))
        #reOrg = (pointID + "," + long + "," + lat + "," + "alt" + "," + "date" + "," + "time")
        gpsTrackPointsReorg.write(reOrg)
    trackPoints.close()
    trackPointsReorg.close()
    
separate("C:/Users/trwil/SpatProg/HW3/Data/GPS_trackpoints.txt","C:/Users/trwil/SpatProg/HW3/Data/GPS_trackpointsReorg.txt")

错误原因

你调用gpsTrackPointsReorg.write(reOrg)时,gpsTrackPointsReorg是函数的字符串参数(传入的文件路径),不是打开的文件对象。真正的文件对象是你在函数内创建的trackPointsReorg变量,你搞混了参数名和文件对象名。

另外还有两个潜在问题:

  1. 拆分日期时间时,用line.split("-")会把整行内容按-分割,应该针对parts[4]里的日期时间字符串拆分
  2. 写入文件时没有添加换行符,所有内容会挤在一行

修复后的代码

def separate(gpsTrackPoints, gpsTrackPointsReorg):
    # 使用with语句自动管理文件关闭,避免资源泄漏
    with open(gpsTrackPoints, "r") as trackPoints, open(gpsTrackPointsReorg, "w") as trackPointsReorg:
        trackPoints.readline()  # 跳过表头行
        lines = trackPoints.readlines()
        for line in lines:
            line = line.strip()  # 去除首尾空白和换行符
            if not line:
                continue  # 跳过空行
            parts = line.split(",")
            pointID = parts[0]
            long = parts[1]
            lat = parts[2]
            alt = parts[3]
            dateTime = parts[4].strip()
            # 正确拆分日期和时间字段
            dateTimeSplit = dateTime.split("-")
            dateStr = dateTimeSplit[0]
            timeStr = dateTimeSplit[1]
            # 添加换行符,确保每行一条记录
            reOrg = f"pointID:{pointID}, longitude:{long}, latitude:{lat}, altitude:{alt}, date:{dateStr}, time:{timeStr}\n"
            # 使用正确的文件对象调用write方法
            trackPointsReorg.write(reOrg)

separate("C:/Users/trwil/SpatProg/HW3/Data/GPS_trackpoints.txt", "C:/Users/trwil/SpatProg/HW3/Data/GPS_trackpointsReorg.txt")

关键修复点

  • 将gpsTrackPointsReorg.write(reOrg)改为trackPointsReorg.write(reOrg),使用函数内创建的文件对象
  • 用with语句管理文件,无需手动调用close()
  • 修正日期时间拆分逻辑,针对目标字段而非整行
  • 添加换行符\n,使输出文件格式更规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:10:49