【发布时间】:2014-11-02 01:07:48
【问题描述】:
我正在尝试根据给定列表下载文件。我的脚本对我来说做得很好。但是,我有一个问题。它只下载第一个。它不会遍历列表。我稍微修改了代码,现在它考虑将列表中的所有元素视为一个元素,并返回错误消息“没有这样的文件或目录数据\item1\nitem2\nitem3\nitem4\nitem5.txt” 这是一部分我的解析输入列表的代码。
def get_data(name):
file_name = os.path.join("data", name + ".txt")
if not os.path.exists(file_name):
sys.exit(-1)
inF = open(file_name, "r")
lines = inF.readlines()
data = ''.join(lines)
return data
编辑:
def download_final_data_for_data(data):
url = "http://www.example.com/"+ data
url_file = urlopen(url)
soup = BeautifulSoup(url_file)
soup1 = str(soup)
pattern=re.compile(r'''>final_data(.*?)</a>''')
data = pattern.findall(soup1)
final_data_number = ''.join(data)
return final_data_number
def get_data(name):
data_list = []
file_name = os.path.join("data", name + ".txt")
if not os.path.exists(file_name):
sys.exit(-1)
inF = open(file_name, "r")
lines = inF.readlines()
for line in lines:
data = line.strip()
if len(data) > 1:
data_list.append(data)
else:
data_list.append(sys.argv[1])
return data_list
【问题讨论】:
-
“数据”是字符串还是列表?
-
您应该可能会遍历函数之外的名称列表,然后只需传入您要处理的单个名称。
-
您将什么
name参数传递给get_data()?你的输入文件是什么样的?readlines()返回文件中的行列表,但在每个项目(字符串)的末尾留下\n。 -
@martineau 实际上在它之前还有另一个脚本,我们在其中给出名称列表,它会为此下载数据。因此对于每个 name.txt 将是其对应的数据。现在我需要给出相同的名称列表,从之前读取这些文件(这是这里的数据输入)。它有多条线路。我的脚本应该一次占用一行。
-
您的
data = ''.join(lines)语句将返回的所有项目readlines()合并为一个字符串(其中包括列表中每个项目末尾的\n)。目前尚不清楚为什么错误消息包含“data\item1\nitem2\nitem3\nitem4\nitem5.txt”,特别是因为您在尝试open()文件之前有一个os.path.exists()调用。
标签: python list file parsing download