在 windows7 上使用 python 解析 .csv 文件时从变量获取路径
Taking a path from a variable while parsing a .csv file with python on windows7
我正在尝试编写一个 python 3.6 脚本,它将在 windows 7 上解析 .csv 文件。我还需要从一个变量(从键盘通过 sys.argv)。当我在 linux 上尝试时很容易:
Python 3.6.2 |Continuum Analytics, Inc.| (默认,2017 年 7 月 20 日,13:51:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] linux
import sys
import csv
#Run script like
#project.py <source_file_path> <resulting_file_path>
source = sys.argv[1]
res_file = sys.argv[2]
fileIn = open(source, 'r')
fileOut = open (res_file, 'w')
with open(str(source),encoding='utf-16') as tsvin:
tsvin = csv.reader(tsvin, delimiter=';')
fileOut = open (str(res_file), 'w')
for row in tsvin:
fileOut.write(""+"\t"+row [0]+"\t"+row[0]+"\n")
当我切换到 Windows7 时,它变得更加复杂。最后,我得到了这个。
Python 3.6.3(v3.6.3:2c5fed8,2017 年 10 月 3 日,17:26:49)Win32 上的 [MSC v.1900 32 位(英特尔)]
#!/usr/bin/python3
import sys
import csv
#raw_file_path = str(sys.argv[1])
#report_path = str(sys.argv[2])
with open (r'C:\Users\folder\source.csv', 'r', newline='', encoding='utf-16') as tsvin:
tsvin = csv.reader (tsvin, delimiter=';')
with open (r'C:\Users\folder\res.txt' , 'w') as fileOut:
for row in tsvin:
fileOut.write(""+"\t"+row [0]+"\t"+row[0]+"\n")
如果我尝试使用我的变量而不是真实路径,我会遇到错误 (1):
with open ('r + raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
OSError: [Errno 22] Invalid argument: "r'C:\Users\folder\source.csv'"
或者另一个错误 (2) 如果我尝试以不同的方式使用我的变量:
with open (r + raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
NameError: name 'r' is not defined
我想,问题是引号引起的,但我不知道如何解决。
这不是 r
的目的。它仅适用于文字。如果您使用变量,则不需要它。
with open(raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
当然,如果您的变量是在别处用文字字符串定义的,那么此时您将使用 r
。
我正在尝试编写一个 python 3.6 脚本,它将在 windows 7 上解析 .csv 文件。我还需要从一个变量(从键盘通过 sys.argv)。当我在 linux 上尝试时很容易:
Python 3.6.2 |Continuum Analytics, Inc.| (默认,2017 年 7 月 20 日,13:51:32) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] linux
import sys
import csv
#Run script like
#project.py <source_file_path> <resulting_file_path>
source = sys.argv[1]
res_file = sys.argv[2]
fileIn = open(source, 'r')
fileOut = open (res_file, 'w')
with open(str(source),encoding='utf-16') as tsvin:
tsvin = csv.reader(tsvin, delimiter=';')
fileOut = open (str(res_file), 'w')
for row in tsvin:
fileOut.write(""+"\t"+row [0]+"\t"+row[0]+"\n")
当我切换到 Windows7 时,它变得更加复杂。最后,我得到了这个。
Python 3.6.3(v3.6.3:2c5fed8,2017 年 10 月 3 日,17:26:49)Win32 上的 [MSC v.1900 32 位(英特尔)]
#!/usr/bin/python3
import sys
import csv
#raw_file_path = str(sys.argv[1])
#report_path = str(sys.argv[2])
with open (r'C:\Users\folder\source.csv', 'r', newline='', encoding='utf-16') as tsvin:
tsvin = csv.reader (tsvin, delimiter=';')
with open (r'C:\Users\folder\res.txt' , 'w') as fileOut:
for row in tsvin:
fileOut.write(""+"\t"+row [0]+"\t"+row[0]+"\n")
如果我尝试使用我的变量而不是真实路径,我会遇到错误 (1):
with open ('r + raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
OSError: [Errno 22] Invalid argument: "r'C:\Users\folder\source.csv'"
或者另一个错误 (2) 如果我尝试以不同的方式使用我的变量:
with open (r + raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
NameError: name 'r' is not defined
我想,问题是引号引起的,但我不知道如何解决。
这不是 r
的目的。它仅适用于文字。如果您使用变量,则不需要它。
with open(raw_file_path , 'r', newline='', encoding='utf-16') as tsvin:
当然,如果您的变量是在别处用文字字符串定义的,那么此时您将使用 r
。