我在这里结合了两个问题,因为它们彼此相关。
问题1:我正在尝试使用glob来打开文件夹中的所有文件,但它正在给我"语法错误"。我使用的是Python 3.xx. Python 3.xx的语法是否已更改?
错误讯息:
File "multiple_files.py", line 29
files = glob.glob(/src/xyz/rte/folder/)
SyntaxError: invalid syntax
代码:
import csv
import os
import glob
from pandas import DataFrame, read_csv
#extracting
files = glob.glob(/src/xyz/rte/folder/)
for fle in files:
with open (fle) as f:
print("output" + fle)
f_read.close()
问题2:我想读取输入文件,追加"输出"到名称并打印出文件的名称。我怎么能这样做?
示例:输入文件名为 - xyz.csv,代码应打印output_xyz.csv。
感谢您的帮助。
答案 0 :(得分:1)
您的第一个问题是字符串(包括路径名)需要在引号中。这样:
files = glob.glob(/src/xyz/rte/folder/)
...试图将一堆变量分开,但最左边和最右边的分区都缺少操作数,所以你混淆了解析器。你想要的是这个:
files = glob.glob('/src/xyz/rte/folder/')
你的下一个问题是这个glob模式中没有任何glob,所以它唯一匹配的就是目录本身。
这是完全合法的,但有点无用。
然后您尝试将每个匹配项打开为文本文件。你不能对目录做什么,因此IsADirectoryError
。
这里的答案不太明显,因为不清楚你想要什么。
也许您只是想要该目录中的所有文件?在这种情况下,您不希望glob.glob
,listdir
(或scandir
}:os.listdir('/src/xyz/rte/folder/')
。{/ p>
也许你想要该目录或其任何子目录中的所有文件?在这种情况下,您可以使用rglob
执行此操作,但os.walk
可能更清晰。
也许您确实希望该目录中的所有文件都与某个模式匹配,因此glob.glob
是正确的 - 但在这种情况下,您需要指定该模式是什么。例如,如果您想要所有.csv
个文件,那就是glob.glob('/src/xyz/rte/folder/*.csv')
。
最后,你说“我想读取输入文件,将”输出“附加到名称并打印出文件的名称”。如果你没有对内容做任何事情,你为什么要阅读文件?当然,你可以做到这一点,但这看起来很浪费。如果您只想打印出附加了输出的文件名,那很简单:
for filename in os.listdir('/src/xyz/rte/folder/'):
print('output'+filename)
答案 1 :(得分:0)
这适用于http://pyfiddle.io:
Doku:https://docs.python.org/3/library/glob.html
import csv
import os
import glob
# create some files
for n in ["a","b","c","d"]:
with open('{}.txt'.format(n),"w") as f:
f.write(n)
print("\nFiles before")
# get all files
files = glob.glob("./*.*")
for fle in files:
print(fle) # print file
path,fileName = os.path.split(fle) # split name from path
# open file for read and second one for write with modified name
with open (fle) as f,open('{}{}output_{}'.format(path,os.sep, fileName),"w") as w:
content = f.read() # read all
w.write(content.upper()) # write all modified
# check files afterwards
print("\nFiles after")
files = glob.glob("./*.*") # pattern for all files
for fle in files:
print(fle)
输出:
Files before
./d.txt
./main.py
./c.txt
./b.txt
./a.txt
Files after
./d.txt
./output_c.txt
./output_d.txt
./main.py
./output_main.py
./c.txt
./b.txt
./output_b.txt
./a.txt
./output_a.txt
我在Windows上,而是使用os.walk
(Doku)代替。
for d,subdirs,files in os.walk("./"): # deconstruct returned aktDir, all subdirs, files
print("AktDir:", d)
print("Subdirs:", subdirs)
print("Files:", files)
Output:
AktDir: ./
Subdirs: []
Files: ['d.txt', 'output_c.txt', 'output_d.txt', 'main.py', 'output_main.py',
'c.txt', 'b.txt', 'output_b.txt', 'a.txt', 'output_a.txt']
它也会进入子目录。