Python os.path.exists为名为“的文件提供了误报”;CON.csv“;在窗户上

Python os.path.exists为名为“的文件提供了误报”;CON.csv“;在窗户上,python,python-3.x,csv,Python,Python 3.x,Csv,我正在用Python做一些小规模的项目来学习它,其中之一就是从.csv文件中编写和读取。我编写了一个脚本,它应该检查文件是否存在,如果没有,则创建一个具有正确头的文件,然后将数据放在其中。如果确实存在,则应将数据添加到现有的.csv文件中。下面是代码片段: if not os.path.exists('crypto/{}.csv'.format(ticker)): with open('crypto/{}.csv'.format(ticker), 'w', newline

我正在用Python做一些小规模的项目来学习它,其中之一就是从.csv文件中编写和读取。我编写了一个脚本,它应该检查文件是否存在,如果没有,则创建一个具有正确头的文件,然后将数据放在其中。如果确实存在,则应将数据添加到现有的.csv文件中。下面是代码片段:

    if not os.path.exists('crypto/{}.csv'.format(ticker)):
        with open('crypto/{}.csv'.format(ticker), 'w', newline='') as file:
            writer = csv.writer(file)
            logger.logChanges('{} ({}) added'.format(name, ticker), True)
            writer.writerow(['price', 'vol24h', 'mCap', 'supply', 'change1h', 'change1d', 'change7d', 'change1m'])
    else:
        print('{} exists'.format(ticker))

    with open('crypto/{}.csv'.format(ticker), 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow([price, vol24h, mCap, supply, change1h, change1d, change7d, change1m])
在要求它检查CON.csv是否存在(事实并非如此)之前,这一切正常,它表示文件存在,并转到下一位,尝试写入不存在的文件。然后给出以下错误:

ValueError: Must have exactly one of read or write mode
据我所知,这意味着它试图读和写?我已经查看了文件夹,但CON.csv不在其中,但是有一个名为QTCON.csv的文件,这可能是误报的原因吗?我该如何解决这个问题

编辑:

回溯(最近一次呼叫最后一次):
文件“c:/Users/lennart/Desktop/PythonProject/.vscode/crypto.py”,第62行,在
grabInfo()
grabInfo中第55行的文件“c:/Users/lennart/Desktop/PythonProject/.vscode/crypto.py”
打开('crypto/{}.csv'.format(ticker),'a',换行符='')作为文件:
ValueError:必须恰好具有读取或写入模式之一

在Windows中,CON是一个特殊文件。如果内存可用,它总是以任何文件扩展名存在于任何地方。这是DOS的延期付款。我不记得它是用来做什么的,但我想它是用于低级控制台I/O的。已经有一段时间了。Retrocomputing Exchange可能会告诉您比您想知道的更多

我认为,如果您将文件命名为几乎任何其他名称(PRN或NUL或其他一些名称除外),您的脚本将按预期运行

有关特殊文件的更多信息:


并且:

由于字符串格式的原因,后一种假设是不正确的-

'crypto/{}。格式(ticker)为'crypto/QTCON.csv'当且仅当ticker='QTCON.csv'

如果CON.csv返回假阳性,则打印错误

CON.csv exists
然后进入这个街区:

with open('crypto/{}.csv'.format(ticker), 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow([price, vol24h, mCap, supply, change1h, change1d, change7d, change1m])
这和上层建筑没有什么关系。 无论如何,请尝试将其更改为:

with open('crypto/{}.csv'.format(ticker), 'a+', newline='') as file:
    writer = csv.writer(file)
    writer.writerow([price, vol24h, mCap, supply, change1h, change1d, change7d, change1m])

签出文件打开权限。

请添加指向此特殊文件文档的链接,好吗?我已经告诉脚本跳过CON.cvs,它似乎继续,但没有给出相同的错误。所以很有可能是这种情况。@corentpane有人提供了下面的链接,我曾尝试使用a+,但这会产生相同的错误,感谢您确认这不是由于具有类似名称的文件造成的。
'crypto/{}.format(ticker)
这不在问题的代码中。@snakecharmerb它在os.path.exists()中 function@Ivaldir请注意,a+将创建不存在的文件并附加到现有文件的末尾。无论哪种方式,问题都可能是由于特定的文件名“CON”导致的,而不考虑其扩展名。读这个。
with open('crypto/{}.csv'.format(ticker), 'a+', newline='') as file:
    writer = csv.writer(file)
    writer.writerow([price, vol24h, mCap, supply, change1h, change1d, change7d, change1m])