我正在尝试遍历文件夹中的所有CSV文件,打开每个CSV文件,执行一些查找/替换操作,然后保存并关闭每个CSV文件。我认为这是我的代码,应该很接近,但是显然有些问题了,因为它无法正常工作。
import glob
path = "C:\\Users\\ryans\\OneDrive\\Desktop\\downloads\\Products\\*.csv"
for fname in glob.glob(path):
print(str(fname))
with open(str(fname)) as f:
newText = f.read().replace('|', ',').replace(' ', '')
with open(str(fname), "w") as f:
f.write(newText)
这是怎么了?
答案 0 :(得分:3)
您应该完成操作并关闭for循环中的文件。
请注意,使用原始字符串作为路径而不是使用每个反斜杠转义会更优雅
import sys
from PyQt5 import QtCore, QtWidgets
class TreeList:
def __init__(self):
self._items = list()
class TreeModel(QtCore.QAbstractItemModel):
def __init__(self, root, parent=None):
super().__init__(parent)
self.root = root
def index(self, row: int, column: int, parent: QtCore.QModelIndex = ...) -> QtCore.QModelIndex:
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
if not parent.isValid():
pointer = self.root # type: TreeList
child = pointer._items[row]
else:
child = None
return self.createIndex(row, column, child)
def addItem(self, layer):
row = len(self.root._items)
self.beginInsertRows(QtCore.QModelIndex(), row, row)
self.root._items.append(layer)
self.endInsertRows()
def parent(self, child: QtCore.QModelIndex) -> QtCore.QModelIndex:
return QtCore.QModelIndex()
def rowCount(self, parent: QtCore.QModelIndex = ...) -> int:
if parent.isValid():
return 0
else:
return len(self.root._items)
def columnCount(self, parent: QtCore.QModelIndex = ...) -> int:
return 1
def hasChildren(self, parent: QtCore.QModelIndex = ...) -> bool:
return False if parent.isValid() else True
def data(self, index: QtCore.QModelIndex, role: int = ...):
# return self.root._items[index.row()]
if role == QtCore.Qt.SizeHintRole:
print(index.isValid(), index.row(), index.column())
return QtCore.QSize(100, 20)
else:
return self.root._items[index.row()]
def flags(self, index: QtCore.QModelIndex):
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
class StackTreeView(QtWidgets.QTreeView):
def __init__(self, data=None, parent=None):
super().__init__(parent)
self.setModel(TreeModel(data))
def addItem(self, layer):
self.model().addItem(layer)
def test():
app = QtWidgets.QApplication(sys.argv)
data = TreeList()
data._items = ['one', 'two']
sys.excepthook = sys.__excepthook__
tree_view = StackTreeView(data)
tree_view.show()
tree_view.addItem('three')
tree_view.addItem('four')
sys.exit(app.exec_())
if __name__ == '__main__':
test()
答案 1 :(得分:1)
import glob
path = "path/to/dir/*.csv"
for fname in glob.glob(path):
print(fname)
with open((fname), "w") as f:
newText = f.read().replace('|', ',').replace(' ', '')
f.write(newText)
f.close()
答案 2 :(得分:0)
使用Pandas库读取csv文件,并将其值替换为预期的文件。
df['range'] = df['range'].str.replace(',','-')
range是列名。 并按照以下步骤保存
df.to_csv(file_name, sep=',')
或不使用库
with open(resource,'rb') as f, open("output.txt", "a+") as outputfile:
for line in f:
line = line.replace(' ', '-')
outputfile.write(line)