【问题标题】:python script output to be saved in different folderpython脚本输出保存在不同的文件夹中
【发布时间】:2019-12-01 21:10:00
【问题描述】:

我正在尝试构建一个关键字工具。为此,我构建了一个 python 脚本,当你运行它时,它会输出一个包含关键字、排名、URL 和日期的 CSV 文件。

我想运行多个关键字,并且想将输出保存在不同的文件夹中。

我用我的 python 脚本创建了 5 个不同的文件夹,并创建了一个 bash 文件,它使用不同的关键字运行脚本并输出不同的 CSV 文件。

bash 文件如下所示:

#! /bin/bash

/usr/bin/python3 /kw1/rank.py [website] [keyword1] 
sleep 30
/usr/bin/python3 /kw2/rank.py [website] [keyword2] 
sleep 20
/usr/bin/python3 /kw3/rank.py [website] [keyword3] 
sleep 30
/usr/bin/python3 /kw4/rank.py [website] [keyword4] 
sleep 25
/usr/bin/python3 /kw5/rank.py [website] [keyword5] 

我遇到的问题是,当我运行 bash 文件时,所有 CSV 输出都存储在 bash 文件所在的主文件夹中,而不是 python 脚本所在的特定文件夹中。

我尝试添加 >> 和 location/output.csv 或 .txt,但输出在 .txt 文件中,或者如果它在 CSV 中,则在一个列中。另外,这不是我的 python 输出,它只是运行 python 脚本时终端输出的内容。

将我的输出保存到 CSV 的 Python 代码如下所示

file = datetime.date.today().strftime("%d-%m-%Y")+'-' +keyword + '.csv'
with open(file, 'w+') as f:
    writer = csv.writer(f)
    writer.writerow(['Keyword' , 'Rank', 'URL' , 'Date'])
    writer.writerows(zip( d[0::4], d[1::4] , d[2::4], d[3::4]))

我想在一个文件夹上运行我的 bash 文件,但我想在 python 脚本所在的特定文件夹中获取我的脚本输出。

谢谢。

【问题讨论】:

  • 所以,你只是给 python 代码一个文件名。只需给它一个完整路径+文件名吗?
  • 但是如果我在脚本中运行 3 个不同的参数,比如说 kw1、kw2、kw3,它们都将保存在我添加到脚本中的完整路径中。我想在特定文件夹中分隔每个 kw
  • 哦。等等我明白你的意思....
  • 好奇你为什么在 python 调用之间睡觉。
  • 因为我正在检查 Google 排名。如果我在一秒钟内运行 10 个关键字,谷歌将阻止我的 IP,这将不起作用。

标签: python linux python-3.x bash csv


【解决方案1】:

打开文件写入时使用绝对路径...

import os.path

# PRETEND YOU 'example' folder under C:\
save_to_path = 'C://example//'
name_of_file = input("What is the name of the file: ")
complete_name = os.path.join(save_to_path, name_of_file+".txt")

with open(complete_name, 'w+') as f:
    f.write('Hi')

现在您在 C:\example\ 中有 Hi.txt 文件

【讨论】:

  • 有什么方法可以选择bash文件中的输出吗?理想情况下,任何想要使用它的机构,只会编辑 bash 文件而不是每个 python 文件:/
  • 我不太确定这部分“选择 bash 文件中的输出”。你能澄清一下吗?
【解决方案2】:

您打开的文件不包含文件夹,它只是一个文件名:

file = datetime.date.today().strftime("%d-%m-%Y")+'-' +keyword + '.csv'

因此,Python 将其解释为 相对路径,这意味着它将当前 PATH 添加到其开头。

您很可能从/home/<user>/ 运行该程序,因此该文件最终位于您的主目录中。

有多种方法可以解决这个问题:

  • 将输出文件夹作为命令行参数提供给程序
  • 硬编码绝对路径
  • 使用相对于您的脚本的路径。因此,您首先需要找出脚本的路径,如here 所述。

【讨论】:

  • 我明白了。但是如果我的 python 脚本在一个文件夹中,文件应该保存在那里吗?
  • 此外,理想情况下,任何想要使用此文件的人只需编辑 bash 文件,而不是每个 python 文件。
  • 然后采用选项 1,将其作为命令行参数提供给脚本。欲了解更多信息,请阅读argparse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2021-07-15
  • 1970-01-01
相关资源
最近更新 更多