新人求解: Python 写入 txt 时数据丢失的问题

2020 年 1 月 14 日
 chaneyccy

主要问题在这:

for txt in list_: txts = txt.get_text() #在这里 print(txts), 结果还是完整的 download_run(title1, title2, title3, title4, txts) #在这里 print(txts), 数据只剩最后一个段落了

代码如下: def download(href_urls): for url in href_urls: mod_titles = [] ses = requests.session() html = ses.get(url, headers = header(), verify = False) soup = BeautifulSoup(html.content, 'html.parser') title_list = soup.find(class_ = 'g-ctnBar').find_all('a') title1 = title_list[2].get_text() title2 = title_list[3].get_text() title3 = title_list[4].get_text() title4 = title_list[5].get_text() list_ = soup.find_all('div', class_ = 'detail-mod J_floor')[:-3] for txt in list_: txts = txt.get_text() download_run(title1, title2, title3, title4, txts)

def download_run(title1, title2, title3, title4, txts): path = 'C:/Users/Desktop/run/%s/%s/%s' %(title1, title2, title3) if not os.path.exists(path): os.makedirs(path) with open('C:/Users/Desktop/run/%s/%s/%s/%s.txt' %(title1, title2, title3, title4), 'w')as f: f.write(txts)

3851 次点击
所在节点    Python
18 条回复
chaneyccy
2020 年 1 月 14 日
排版有点乱,更新一下

def download(href_urls):

for url in href_urls:

mod_titles = []

ses = requests.session()

html = ses.get(url, headers = header(), verify = False)

soup = BeautifulSoup(html.content, 'html.parser')

title_list = soup.find(class_ = 'g-ctnBar').find_all('a')

title1 = title_list[2].get_text()

title2 = title_list[3].get_text()

title3 = title_list[4].get_text()

title4 = title_list[5].get_text()

list_ = soup.find_all('div', class_ = 'detail-mod J_floor')[:-3]

for txt in list_:

txts = txt.get_text()

download_run(title1, title2, title3, title4, txts)


def download_run(title1, title2, title3, title4, txts):

path = 'C:/Users/Desktop/run/%s/%s/%s' %(title1, title2, title3)

if not os.path.exists(path):

os.makedirs(path)

with open('C:/Users/Desktop/run/%s/%s/%s/%s.txt' %(title1, title2, title3, title4), 'w')as f:

f.write(txts)
JCZ2MkKb5S8ZX9pq
2020 年 1 月 14 日
```
你的代码
```

这样可以保留模式。回复时无效。详情可查 markdown 格式。
JCZ2MkKb5S8ZX9pq
2020 年 1 月 14 日
格式
chaneyccy
2020 年 1 月 14 日
@JCZ2MkKb5S8ZX9pq 好的,平时没有用 markdown 写内容的习惯~ 我去研究下
cxyfreedom
2020 年 1 月 14 日
你遍历循环又每次写入,你循环完成后,txts 本来就只有一部分的数据,写入到文件中当然就只有最后一部分。
Vegetable
2020 年 1 月 14 日
Vegetable
2020 年 1 月 14 日
@cxyfreedom #5 代码我读了,是因为每次都 open(file,'w')写入的原因。
Wuuuu
2020 年 1 月 14 日
感觉应该是 txts = txts+"\n"+txt.get_txt()?
Wuuuu
2020 年 1 月 14 日
@Vegetable py 靠缩进……这样的不知道到底是
for txt in list_:

txts = txt.get_text()

download_run(title1, title2, title3, title4, txts)

还是
for txt in list_:

txts = txt.get_text()

download_run(title1, title2, title3, title4, txts)

但大概率是第二种写法吧。
Wuuuu
2020 年 1 月 14 日
for txt in list_:

\t txts = txt.get_text()

\t download_run(title1, title2, title3, title4, txts)

for txt in list_:

\t txts = txt.get_text()

download_run(title1, title2, title3, title4, txts)
sDG9xz87SqqCC3mN
2020 年 1 月 14 日
把 w 改成 a
zhejiangblue
2020 年 1 月 14 日
打开模式用 a,w 会重新创建文件的
chaneyccy
2020 年 1 月 14 日
@Vegetable 感谢感谢,之前把从'a'改成'w'了,没考虑到这个原因,调回来正常了
cxyfreedom
2020 年 1 月 14 日
@Vegetable 如果 for 循环下面的话那就是这个问题。追加写入不能用 w。按这个代码逻辑不如一次性写入呢
m95r1jQyWNZ0uhqn
2020 年 1 月 14 日
JCZ2MkKb5S8ZX9pq
2020 年 1 月 14 日
如果是 aw 的问题 建议拼接 txt 然后 w
a 万一重复执行会重复写入
cherbim
2020 年 1 月 14 日
你文件写入的是 w,每次都会重写,用 a 追加啊
shunfa52000
2020 年 1 月 15 日
上次我程序结尾没有加 f.close,结果循环次数多的时候报错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX