鍍金池/ 問答/Python/ python寫入文件報(bào)錯(cuò)TypeError: must be str, not

python寫入文件報(bào)錯(cuò)TypeError: must be str, not list

將一個(gè)轉(zhuǎn)化為 string 的 list 存入 txt 時(shí)候報(bào)錯(cuò),存儲(chǔ)函數(shù)如下:

def saveFile(data, name):
    path = "E:\\sxks\\JavaProblems\\" + name + ".txt"
    data.encode("utf-8")
    f = open(path, 'wb+')
    f.write(data)
    f.close()

list 轉(zhuǎn)化 string 代碼如下:

sdata = []

for p in list:
    sdata.append(p.text)
    
s = '\n'.join(sdata)

str(sdata)也嘗試過了,錯(cuò)誤依舊, 請(qǐng)問是什么問題?

完整代碼如下:

import urllib.request
from urllib.parse import urljoin
import time
from bs4 import BeautifulSoup


def saveFile(data, name):
    path = "E:\\sxks\\JavaProblems\\" + name + ".txt"
    print(path)
    data.encode("utf-8")
    f = open(path,'wb')
    f.write(data)
    f.close()

urllist=[]
for i in range(1,8):
    if i==1:
        urlx="http://www.233.com/ncre2/JAVA/moniti/index.html"
        urllib.parse.quote(urlx)
        urllist.append(urlx)
        break
    urlx="http://www.233.com/ncre2/JAVA/moniti/index0"+i+".html"
    urllib.parse.quote(urlx)
    urllist.append(urlx)

for url in urllist:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    req = urllib.request.Request(url=url, headers=headers)
    res = urllib.request.urlopen(req)
    res.encoding = 'utf-8'
    data = res.read()
    soup = BeautifulSoup(data, "html.parser")
    lista = []
    lista = soup.select('ul.fl.f14.list-box.best-list.mt10 li a')
    print("result len is", len(lista))
    urls = []
    for li in lista:
        urls.append(li['href'])
    for r in urls:
        req = urllib.request.Request(url=r, headers=headers)
        res = urllib.request.urlopen(req)
        data = res.read()
        soup = BeautifulSoup(data, "html.parser")
        name = soup.select('h2')
        listp = []
        listp = soup.select('.newsArea-2nd-PageWord p')
        sdata = []
        for p in listp:
            sdata.append(p.text)
        s = '\n'.join(sdata)
        str(s)
        saveFile(s, name)
        print(name[0].text + "保存成功")
        time.sleep(1)
time.sleep(1)

打印 s 的類型確實(shí)是 str

回答
編輯回答
陌顏

你的 name 不是 str 喔!

我試著跑的結(jié)果:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-15-d43d76cb2656> in <module>()
     51         s = '\n'.join(sdata)
     52         str(s)
---> 53         saveFile(s, name)
     54         print(name[0].text + "保存成功")
     55         time.sleep(1)

<ipython-input-15-d43d76cb2656> in saveFile(data, name)
      6 
      7 def saveFile(data, name):
----> 8     path = name + ".txt"
      9     print(path)
     10     data.encode("utf-8")

TypeError: can only concatenate list (not "str") to list
2018年3月12日 14:07
編輯回答
淡墨

你還是把完整代碼和報(bào)錯(cuò)貼出來吧,這么前后不搭的看不什么.比如那個(gè)for循環(huán)里的list是什么,里面是什么數(shù)據(jù)?
另外list跟內(nèi)置類重名了

兩個(gè)錯(cuò)誤:
1.saveFile(s,name)
這里name還是一個(gè)tag的list對(duì)象,需要name[0].text

2.data.encode('utf-8')
這里需要重新賦值一下,encode()是不會(huì)改變?cè)瓉淼淖址?字符串是不可變對(duì)象)
data = data.encode('utf-8')

2017年12月25日 17:27