Python 遍历目录,更改分隔符并更改文件扩展名
正如标题所述,我正在尝试遍历.tsv文件目录,我想将分隔符从tab改为“|”,并将扩展名改为.csv。当我从命令行运行此命令并传入文件路径、旧扩展名和新扩展名(例如:“例如:convert.py C:/Users/MyDir/files.tsv.csv”)时,我得到错误:“WindowsError:[错误2]系统找不到指定的文件” 这是我目前的代码:Python 遍历目录,更改分隔符并更改文件扩展名,python,csv,Python,Csv,正如标题所述,我正在尝试遍历.tsv文件目录,我想将分隔符从tab改为“|”,并将扩展名改为.csv。当我从命令行运行此命令并传入文件路径、旧扩展名和新扩展名(例如:“例如:convert.py C:/Users/MyDir/files.tsv.csv”)时,我得到错误:“WindowsError:[错误2]系统找不到指定的文件” 这是我目前的代码: import csv import sys import os if len(sys.argv) < 4: sys.exit("
import csv
import sys
import os
if len(sys.argv) < 4:
sys.exit("Usage: convert_to_psv.py ~/dir .tsv .csv")
else:
cur_dir = (sys.argv[1])
old_ext = (sys.argv[2])
new_ext = (sys.argv[3])
print "here1"
files = os.listdir(cur_dir)
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
newfile = filename.replace(old_ext, new_ext)
os.rename(filename, newfile)
csv.field_size_limit(sys.maxsize)
csv.writer(file(sys.argv[3], 'w+'), delimiter="|").writerows(csv.reader(open(sys.argv[2]), delimiter="\t"))
导入csv
导入系统
导入操作系统
如果len(sys.argv)<4:
sys.exit(“用法:将_转换为_psv.py~/dir.tsv.csv”)
其他:
cur_dir=(sys.argv[1])
old_ext=(sys.argv[2])
new_ext=(sys.argv[3])
打印“此处1”
files=os.listdir(cur\u dir)
对于文件中的文件名:
file_ext=os.path.splitext(文件名)[1]
如果old_ext==文件_ext:
newfile=filename.replace(旧的扩展名,新的扩展名)
重命名(文件名,新文件)
csv.字段大小限制(sys.maxsize)
csv.writer(文件(sys.argv[3],'w+',分隔符=“|”).writerows(csv.reader(打开(sys.argv[2]),分隔符=“\t”))
提前谢谢你的帮助 不能同时读写同一个文件;您要么将所有内容读入内存,要么使用单独的输出文件 最简单的方法是不重命名文件,而是改为写入新文件名,然后删除旧文件:
import csv
import sys
import os
if len(sys.argv) < 4:
sys.exit("Usage: convert_to_psv.py ~/dir .tsv .csv")
else:
cur_dir, old_ext, new_ext = sys.argv[1:]
for filename in os.listdir(cur_dir):
filename = os.path.join(cur_dir, filename)
base, file_ext = os.path.splitext(filename)
if file_ext == old_ext:
newfile = base + new_ext
csv.field_size_limit(sys.maxsize)
with open(filename, 'rb') as ifh, open(newfile, 'wb') as ofh:
reader = csv.reader(ifh, delimiter='\t')
csv.writer(ofh, delimiter='|').writerows(reader)
os.unlink(filename)
导入csv
导入系统
导入操作系统
如果len(sys.argv)<4:
sys.exit(“用法:将_转换为_psv.py~/dir.tsv.csv”)
其他:
cur_dir,old_ext,new_ext=sys.argv[1:]
对于os.listdir(cur_dir)中的文件名:
filename=os.path.join(cur_dir,filename)
base,file_ext=os.path.splitext(文件名)
如果文件\u ext==旧\u ext:
新文件=基础+新外部
csv.字段大小限制(sys.maxsize)
将open(文件名“rb”)作为ifh,open(新文件“wb”)作为ofh:
reader=csv.reader(ifh,分隔符='\t')
csv.writer(ofh,分隔符=“|”).writerows(reader)
取消链接(文件名)
请注意,这不一定会创建具有相同权限的新文件。您可能需要
csv.writer(of,delimiter='|').writerows(reader)
。至少在确定它有效之前,最好将取消链接()谢谢,是的,那是个打字错误。原始版本肯定会破坏数据,所以我们希望OP会进行备份。:-)哈我做的第一件事就是把我的文件复制到一个新目录。谢谢,伙计们。我将在测试后立即报告。因此,我在第14行得到一个错误:open(filename,'rb')作为ifh,open(newfile,'wb')作为ofh:“没有这样的文件或目录:'first.tsv'”。它挂在文件的第一个.tsv上。有什么想法吗?@user2338089:fixed,os.listdir()
只给出相对名称,而不给出路径。