【问题标题】:Python not creating file when ran from cmd line从 cmd 行运行时 Python 不创建文件
【发布时间】:2019-08-06 23:25:49
【问题描述】:

我有一个创建 python 脚本来清理 csv 文件。脚本文件“CleanCSV.py”中的代码如下

import csv

filepath_i = 'C:\Source Files\Data Source\Flat File Source\PatientRecords.csv'
filepath_o = 'C:\Python\PatientRecords.csv'
rows = []
with open(filepath_i, 'r', newline='') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
    with open(filepath_o, 'w', newline='' ) as writeFile:
        writer = csv.writer(writeFile, lineterminator='\r')
        for row in csv_reader:
            row[3] = row[3].replace("\n","").replace("\r","") 
            rows.append(row) 
        writer.writerows(rows)

当从 python 编辑器运行时,这工作正常。但从命令行运行时不创建文件,如下所示。

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64>python C:\Python\CleanCSV.py 

我也试过了

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64>pythonw C:\Python\CleanCSV.pyw 

我提供了对文件夹的完全访问权限,但它仍然没有在目的地创建任何文件。如果我遗漏了什么,请告诉我。

还请建议是否可以优化此代码。我不能使用像熊猫这样的外部包,所以我用 csv 来做。提前致谢。

扩展

当我更改为 x 进行写入设置时

with open(filepath_o, 'x', newline='' ) as writeFile:

令我惊讶的是,我收到了这个错误

File "CleanCSV.py", line 8, in <module>
    with open(filepath_o, 'x', newline='' ) as writeFile:
FileExistsError: [Errno 17] File exists: 'C:\\Python\\PatientRecords1.csv'

但我没有在目录中看到该文件。即使将隐藏文件设置为true。所以我运行了这个脚本。

from pathlib import Path
config = Path(filepath_o )
if config.is_file():
    print('yes')
    print(config)
else:
    print('no')

得到这个输出,但目录中没有文件!不解。

yes
C:\Python\PatientRecords1.csv

扩展 2

重写脚本以尝试使用目录

with open(filepath_i,'r') as csv_file:
    csv_reader = csv.DictReader(csv_file, delimiter=',', quotechar='"')

    with open('PatientRecords1.csv', 'w') as writeFile:
        fieldnames = ['DRG Definition','Provider Id','Provider Name','Provider Street Address','Provider City','Provider State','Provider Zip Code','Hospital Referral Region Description','Hospital Category','Hospital Type', 'Total Discharges' ,'Covered Charges' , 'Total Payments' ,'Medicare Payments']
        writer = csv.DictWriter(writeFile,fieldnames=fieldnames)
        for row in csv_reader:
            row['Provider Street Address'] = row['Provider Street Address'].replace("\n","").replace("\r","") 
            writer.writerows(row)

但收到此错误

Traceback (most recent call last):
  File "CleanCSV.py", line 36, in <module>
    writer.writerows(row)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\csv.py", line 158, in writerows
    return self.writer.writerows(map(self._dict_to_list, rowdicts))
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\csv.py", line 148, in _dict_to_list
    wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'str' object has no attribute 'keys'

输入文件数据示例

DRG Definition,Provider Id,Provider Name,Provider Street Address,Provider City,Provider State,Provider Zip Code,Hospital Referral Region Description,Hospital Category,Hospital Type, Total Discharges ,Covered Charges , Total Payments ,Medicare Payments
039 - EXTRACRANIAL PROCEDURES W/O CC/MCC,10001,SOUTHEAST ALABAMA MEDICAL CENTER,1108 ROSS CLARK CIRCLE,DOTHAN,AL,36301,AL - Dothan,Specialty Centers,Government Funded,91,"$32,963.07 ","$5,777.24 ","$4,763.73 "
039 - EXTRACRANIAL PROCEDURES W/O CC/MCC,10005,MARSHALL MEDICAL CENTER SOUTH,"2505 U S HIGHWAY 
431 NORTH",BOAZ,AL,35957,AL - Birmingham,Specialty Centers,Private Institution,14,"$15,131.85 ","$5,787.57 ","$4,976.71 "
039 - EXTRACRANIAL PROCEDURES W/O CC/MCC,10006,ELIZA COFFEE MEMORIAL HOSPITAL,205 MARENGO STREET,FLORENCE,AL,35631,AL - Birmingham,Rehabilitation Centers,Private Institution,24,"$37,560.37 ","$5,434.95 ","$4,453.79 "

扩展 3

看起来文件是在目录中创建的,我得到了这两段代码的输出。但是我看不到那个文件,想知道为什么!!

with open(filepath_o,'r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
    for row in csv_reader:
        print(row)

import os.path 
from os import path
print(path.exists(filepath_o ))

【问题讨论】:

  • 你为什么从 Python 安装目录运行?从实际脚本位置运行。确保已将 Python 添加到 PATH
  • 我应该将 python.exe 复制到脚本文件位置'C:\Python\PatientRecords.csv'。
  • 不,请遵循:geek-university.com/python/add-python-to-the-windows-path。这将允许您从任何地方运行 Python
  • 一旦你解决了 PATH 问题,如果你使用 ; 将扩展名 .py 和 .pyw 附加到 PATHEXT 环境变量中。作为分隔符(假设它们不存在),您声明这些文件类型应被视为可执行文件。您应该能够像上面尝试的第二种情况一样执行 python 文件(即只输入文件名而不使用 python 命令在其前面)或在资源管理器窗口中双击 python 文件。当然,要实现这一点,这些文件类型和它们的“打开器”之间必须有关联。
  • 肯定会这样做,谢谢。

标签: python cmd


【解决方案1】:

转到您的 python 脚本所在的位置。点击文件夹地址栏输入cmd

然后命令提示符将从脚本的文件夹位置启动

然后输入cmd

python CleanCSV.py

注意:您需要将 python 添加到环境变量中。


如果您使用的是 Anaconda,请按照上述 Anaconda Prompt 中的相同步骤操作。

【讨论】:

  • 我这样做了,将环境变量添加到 python.exe 路径并从脚本位置执行。但它没有创建文件..
  • 请查看我的编辑。它说文件存在,但我没有看到文件。
  • import os os.listdir() 文件名出现了吗?
  • 是的,它正在显示。甚至 print 正在处理该文件。请参阅我的问题的第三个分机以获取代码。
  • 这是我得到的输出 ['CleanCSV.py', 'PatientRecords.csv']
【解决方案2】:

这令人费解。 csv 可能不喜欢 open 中的显式 r/w/x 参数。例如,不要使用open(filepath_i, 'r', newline=''),而是尝试open(filepath_i, newline='')

【讨论】:

  • 谢谢,我试过了,得到了这个错误。文件“CleanCSV.py”,第 13 行,在 writer.writerows(rows) io.UnsupportedOperation: not writable
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 2020-08-13
  • 2013-08-13
  • 2018-06-23
  • 1970-01-01
  • 2021-12-24
  • 2013-09-19
  • 1970-01-01
相关资源
最近更新 更多