【问题标题】:Setting the save file directory and arrays设置保存文件目录和数组
【发布时间】:2015-08-26 10:51:47
【问题描述】:

我是 Python 新手,这在我的第一个脚本中。我很想让它工作,并希望寻求一些支持来帮助我进入这门语言。

我下面的脚本将一个 url 数据保存到 csv 中,接下来我想做的两件事是。

  1. 在本地机器上指定要保存的文件夹,这样我就不需要 py.同一目录下的文件。让我们为了争论说我不想保存到 c:\myfiles 并且它们 .py 文件位于同一台机器上的其他任何地方。

  2. 我想了解如何在 python 中构建变量数组并循环遍历我的 ASXCode 变量。首先,假设我有 CSL.ax 和 BHP.ax 作为元素。最终,我想从外部源(如 txt 文件或 SQL 表)传递它,但现在为了帮助我的学习,我对这个脚本中的静态数组感到满意(小步骤)。我假设我需要一个 For 循环或类似的循环来遍历我的代码中的元素。

我不是要求任何人为我做这一切,有关方法/功能和程序流程的线索将非常有助于我解决问题。

谢谢,

巴斯曼

import csv
import os
import urllib.request, urllib.parse, urllib.error

ASXCode = 'CSL'
local_filename = "Intra_" + ASXCode + ".csv"
url = ('http://chartapi.finance.yahoo.com/instrument/1.0/' + ASXCode +
       '.ax/chartdata;type=quote;range=15d/csv')

temp_filename, headers = urllib.request.urlretrieve(url)

with open(temp_filename, 'r', newline='') as inf, \
     open(local_filename, 'w', newline='') as outf:
    reader = csv.reader(inf)
    writer = csv.writer(outf)
    for _ in range(32):   # skip first 32 rows
        next(reader)
    writer.writerows(reader)  # copy the rest

os.remove(temp_filename)  # clean up
print('{} downloaded'.format(local_filename))

【问题讨论】:

  • 您是否尝试过local_filename="c:\myfiles\foobar.csv" 将文件保存在另一个文件夹中?对于第二个问题,我不明白你不能实现什么。你能说得更准确点吗?
  • 嗨,帕特里克,提前致谢。 local_filename = "c:\myFiles\CSL.csv" 工作,但是当我使用 local_filename = "c:\myFiles\" + ASXCode + ".csv" 时,我在扫描字符串文字时收到错误 EOL。如果我取出 c:\myfiles 末尾的 \,它会运行,但会将我的文件保存到 c:\ 并将 myfile 添加到文件名中。我一定错过了一些简单的东西。谢谢巴斯曼
  • 对于我的第二部分,我想为变量 ASXCode 设置类似的东西。例如ASXCode = ('CSL, 'BHP'),然后循环 ASXCode 中每个元素的其余代码。也许我正在考虑其他语言,但不确定如何在 Python 中正确处理它。
  • 是的。 ` \ ` 是一个转义字符(即\" 会将" 放入字符串中)。你应该把每个`\`加倍(我之前的回答是错误的)。试试"c:\\myfiles\\foobar\\" + ASXCode + ".csv"
  • 谢谢帕特里克,我会在很长一段时间里跌跌撞撞地试图弄清楚。节省了我大量的时间。

标签: python arrays directory


【解决方案1】:

如果你想为不同的 ASXCode 值执行相同的代码,你可以这样做:

ASXCodes = ('CSL', 'XXX', 'YYY')
for ASXCode in ASXCodes:
    local_filename = "c:\\myfiles\\foobar\\" + ASXCode + ".csv"
    print("Saving to {}".format(local_filename))
    with open(local_filename, 'w', newline='') as outf:
        ...
print("done")

【讨论】:

  • 嗨帕特里克,当您弹出解决方案时,我正准备使用 for 循环。在 for 循环上再做 1 件事,假设我希望我的所有代码都循环,这是可行的。但是,如果假设有 10 行代码并且我希望循环前 5 行,然后运行剩余的非循环代码,是否就像在第 5 行之后放置“else”一样简单?我做对了吗?
  • Python 将循环所有缩进大于for 的内容。如果您想要循环之外的一些代码,请不要缩进它。我已经编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多