【问题标题】:CSV Module Reading In Files, which are in some other folder (e.g. my Downloads folder)CSV 模块读取文件,位于其他文件夹中(例如我的下载文件夹)
【发布时间】:2017-04-16 00:08:22
【问题描述】:

所以我想使用 csv 模块来读取一些 csv.files,但给定代码出现以下错误:

########################### IMPORT MODULES ############################

import sys, time, glob, os, csv, student

######################### DEFINE PARAMETERS ###########################

timings_csv_file      = './timings.csv'
inputs_csv_file       = './inputs.csv'
testing_pair_csv_file = './testing_pair.csv'

############## LOAD TIMINGS INFORMATION AND TEST PAIR #################

csv_reader = csv.reader(open(timings_csv_file, 'rb'), delimiter=',')
timings = [int(element) for element in csv_reader.next()]

csv_reader = csv.reader(open(testing_pair_csv_file, 'rb'), delimiter=',')
testing_pair = [long(element) for element in csv_reader.next()]

csv_reader = csv.reader(open(inputs_csv_file, 'rb'), delimiter=',')
inputs = [long(element) for element in csv_reader.next()]

##################### PERFORM TIMING ATTACK ###########################

key = student.perform_timing_attack(inputs, timings, testing_pair)

######################## OUTPUT RESULTS ###############################

keyhex = ",".join(["%02X" % (key >> 64-(8*(i+1)) & 0x00000000000000FF ) for i in range(64/8) ])
print keyhex

################### WRITE RESULTS TO A FILE ###########################

keyF = open( "./key.txt", "w" )
keyF.write(keyhex)
keyF.close()

我收到即将出现的错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)
  File "/Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
    builtins.execfile(filename, *where)
  File "/Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings/framework/main.py", line 13, in <module>
    csv_reader = csv.reader(open(timings_csv_file, 'rb'), delimiter=',')
IOError: [Errno 2] No such file or directory: './timings.csv'

我认为 Python 无法在当前目录中找到它实际查找或运行的文件,因为我说过:“./file.csv”。据我所知,它正在查看其当前目录。我知道,如果我输入 csv 文件的整个路径,它会起作用,但我想让它独立于文件路径,因此代码必须能够始终使用自己路径中的数据.

那么我必须如何更改 Python 的路径才能将 csv 文件留在原处并且​​仍然能够使用“./file.csv”。例如。当我通过使用“sys.path[0]”检查 Python 实际在寻找什么路径时,我得到了输出“''”,我并不真正理解,因为路径的 '' 到底是什么?此外,我尝试设置我的 PYTHONPATH,但我认为 PYTHONPATH 只涉及模块的数据导入(对吗?)。

那么我应该怎么做才能设置 Python 正在寻找的路径,以使“./file.csv”对我有用。

谢谢!

【问题讨论】:

  • 您是否尝试从脚本运行的位置升级一个目录?在这种情况下,您可以import os,然后是directory = os.path.dirname(__file__),然后是file_to_read = os.path.join(directory, '../timings.csv')。我不确定与脚本位置无关的更通用的解决方案。
  • 它正在 /Users/Amine/anaconda/lib/python2.7/site-packages/spyder/utils/site/ 中搜索,这就是您收到该错误的原因。
  • 是的,你怎么知道的。我使用以下“ os.chdir('/Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings')”更改了当前的python工作目录,从而可以升级一个目录。但我仍然收到错误消息。
  • @Prajwal:那么我怎样才能将其更改为搜索 /Users/Amine/Downloads/SIKA_Aufgabe_2/ga24feb_timings
  • 当有相对路径时,python从当前执行脚本的位置开始。我在这里找到了一个非常有用的帖子。看一下这个。 stackoverflow.com/questions/1270951/…

标签: python python-2.7 file csv reader


【解决方案1】:

如果您知道您正在处理的文件始终与您的脚本位于同一路径中,如您的语句所示“因此代码必须能够始终使用其自己路径中的数据。”,您可以用文件名(不带斜线)调用文件:

timings_csv_file      = 'timings.csv'
inputs_csv_file       = 'inputs.csv'
testing_pair_csv_file = 'testing_pair.csv'

当你的目录看起来像这样时,这将起作用:

dir/
....script.py
....timings.csv
....inputs.csv
....testing_pair.csv

另一方面,如果你想提升一个层次结构(我不太确定这是否是你想要的?)你可以这样做:

timings_csv_file      = '../timings.csv'
inputs_csv_file       = '../inputs.csv'
testing_pair_csv_file = '../testing_pair.csv'

当您的文件夹结构如下所示时,这将起作用:

dir/
....timings.csv
....inputs.csv
....testing_pair.csv
....python/
    ....script.py

【讨论】:

  • 嘿克里斯蒂安!首先感谢您的解决方案!确实,csv。文件是我当前工作目录(cwd)之上的一个层次结构级别。如果我将您的方法与timings_csv_file = '../timings.csv' inputs_csv_file = '../inputs.csv' testing_pair_csv_file = '../testing_pair.csv'一起使用,它就像一个魅力:)。但是,如果我的文件在上一级目录和file.csv如果它们在当前工作目录中,我可以使用../file.csv,那么./file.csv 的用例又是什么。已经帮了我很多了!谢谢
【解决方案2】:

而不是,

timings_csv_file      = './timings.csv'
inputs_csv_file       = './inputs.csv'
testing_pair_csv_file = './testing_pair.csv'

使用

import os
current_path = os.getcwd() 
timings_csv_file      = current_path + '\\timings.csv'
inputs_csv_file       = current_path + '\\inputs.csv'
testing_pair_csv_file = current_path + '\\testing_pair.csv'

这会获取脚本的当前工作目录并将完整路径传递给库。

【讨论】:

  • 嘿普拉杰瓦尔!谢谢,这工作得很好。但问题是,我不允许更改上面引用的代码。这就是 main.py 文件。你能解释一下使用类似 timings_csv_file = './timings.csv'timings_csv_file = 'timings.csv' 之间的区别,所以基本上没有点斜线吗?我一直在想,当我输入./files.type 时,我会说要查看它所在的当前目录?
  • @Prajwal:是的,仅使用timings.csv 与前面的./ 相同。所以我猜它没有效果?你说什么?
  • 我就是这么想的。您需要指定绝对路径。否则将文件保存在frameworks
  • 非常感谢!这意味着我必须将数据和代码放在同一个目录中,这实际上是一个坏习惯,但由于我不允许更改它,所以我不得不这样。
  • 是的。 ./just_name 不应该有任何不同,因为 Python 将两者解析为相同的路径。我这里就不解释了,太大了,不能评论。
猜你喜欢
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
相关资源
最近更新 更多