【问题标题】:Writing string list to a txt file, but the file is empty why?将字符串列表写入txt文件,但文件为空,为什么?
【发布时间】:2014-08-15 16:13:53
【问题描述】:
import re, urllib.request

patern = re.compile(r'image/\w*\W*\w*\.\jpg', re.I|re.M)

file = open('APODLinks.txt','r')
rf = file.read()
a = rf.split('\n')
file.close()


def lic(li):
    if not li:
        pass
    else:
        print(li[0])
        f.write('http://apod.nasa.gov/apod/%s\n' % li[0])


def main():
    for i in range(len(a)):
        ur = urllib.request.urlopen(a[i])
        mf = re.findall(patern, str(ur.read()))
        lic(mf)

f = open('APODImgs.txt','w')
main()
f.close()

我的代码有什么问题我正在尝试用所有 jpg 图片编写一个 txt 文件 来自当天的天文图片,但文件 APODImgs.txt 是空的...... mf 列表有时是空的,也许这是我的问题...

APODLinks.txt 包含这样的网址:

apod.nasa.gov/apod/ap140815.html
apod.nasa.gov/apod/ap140814.html
apod.nasa.gov/apod/ap140813.html

7000行网址

APODImgs.txt 必须是这样的:

apod.nasa.gov/apod/image/1408/Persei93_1abolfath.jpg
apod.nasa.gov/apod/image/1408/Supermoon_20140810.JPG
apod.nasa.gov/apod/image/1408/m57_nasagendler_3000.jpg
apod.nasa.gov/apod/image/1408/HebesChasma_esa_1024.jpg
...

请帮助并为我的英语感到抱歉...

【问题讨论】:

  • 不会影响你的模式,但是'\jpg'中的'j'不需要转义。
  • 我复制了您的代码并使用您拥有的示例文件进行了尝试。一旦我将“http://”添加到 APODLinks.txt 中链接的开头,它似乎就起作用了。此外,你可以只拥有一个 = file.readlines()

标签: python list for-loop python-3.x


【解决方案1】:

很可能not lilic 中始终为真,因为您的正则表达式不匹配。

要弄清楚,打印 HTTP 响应正文:

urr = urllib.request.urlopen(a[i]).read()
print repr(urr)
mf = re.findall(patern, urr)
print repr(mf)
lic(mf)

【讨论】:

  • 我的正则表达式很好......一些网址有其他格式的视频或图像。因为我的列表是空的...当我运行脚本时,行 print(li[0]) 可以打印出所有 ulrs 但 APODImgs.txt 是空的...
  • f.write(...) 之后添加一个f.flush() 调用,并在其上方添加一个print('WRITING:' + repr(li[0]))。那么你的程序的确切控制台输出是什么,文件的大小是多少?您确定您没有在程序运行时尝试查看文件吗?您确定在程序完成之前不会中止程序吗?您确定程序没有因为未捕获的异常而中止吗?
【解决方案2】:

我更改了我的代码,它可以工作!!!

import re, urllib.request

patern = re.compile(r'image/\w*\W*\w*\.jpg', re.I|re.M)

file = open('APODLinks.txt','r')
rf = file.read()
a = rf.split('\n')
file.close()


def lic(li):
    if not li:
        print("No matches found")  
    else:
        print('http://apod.nasa.gov/apod/%s' % li[0])
        f.write('http://apod.nasa.gov/apod/%s\n' % li[0])


def main():
    for i in range(len(a)):
        try:
            ur = urllib.request.urlopen(a[i])
        except:
            print('404 not found!')
        mf = re.findall(patern, str(ur.read()))
        lic(mf)

f = open('APODImgs.txt','w')
main()
f.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2017-04-14
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多