我最近迁移到了Py 3.5.这段代码在Python 2.7中正常工作:
with open(fname, 'rb') as f:
lines = [x.strip() for x in f.readlines()]
for line in lines:
tmp = line.strip().lower()
if 'some-pattern' in tmp: continue
# ... code
Run Code Online (Sandbox Code Playgroud)
升级到3.5后,我得到了:
TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)
最后一行的错误(模式搜索代码).
我已尝试.decode()
在语句的任何一侧使用该函数,也尝试过:
if tmp.find('some-pattern') != -1: continue
Run Code Online (Sandbox Code Playgroud)
- 无济于事.
我能够迅速解决几乎所有2:3的问题,但这个小小的陈述让我烦恼.
我想在我的旧csv文件中添加一个新行.基本上,每次运行Python脚本时它都会更新.
现在我将旧的csv行值存储在列表中,然后删除csv文件并使用新的列表值再次创建它.
想知道有没有更好的方法来做到这一点.
我正在尝试使用Python列表中的值创建.csv文件.当我打印列表中的值时,它们都是unicode(?),即它们看起来像这样
[u'value 1', u'value 2', ...]
Run Code Online (Sandbox Code Playgroud)
如果我遍历列表中的值,即for v in mylist: print v
它们看起来是纯文本.
我可以,
在每个之间放一个print ','.join(mylist)
我可以输出到文件,即
myfile = open(...)
print >>myfile, ','.join(mylist)
Run Code Online (Sandbox Code Playgroud)
但是我想输出到CSV并且在列表中的值周围有分隔符,例如
"value 1", "value 2", ...
Run Code Online (Sandbox Code Playgroud)
我找不到一种简单的方法来在格式中包含分隔符,例如我已经尝试了join
语句.我怎样才能做到这一点?
我编写了一个合并两个csv文件的Python脚本,现在我想在最终的csv中添加一个标题.我尝试按照此处报告的建议,我收到以下错误:expected string, float found
.什么是解决这个问题的最pythonic方法?
这是我正在使用的代码:
import csv
with open('combined_file.csv', 'w', newline='') as outcsv:
writer = csv.DictWriter(outcsv, fieldnames = ["Date", "temperature 1", "Temperature 2"])
writer.writeheader()
with open('t1.csv', 'r', newline='') as incsv:
reader = csv.reader(incsv)
writer.writerows(row + [0.0] for row in reader)
with open('t2.csv', 'r', newline='') as incsv:
reader = csv.reader(incsv)
writer.writerows(row[:1] + [0.0] + row[1:] for row in reader)
Run Code Online (Sandbox Code Playgroud) 从这个问题和其他问题看来,似乎不建议使用concat
或append
构建一个pandas数据帧,因为它每次都在重新复制整个数据帧.
我的项目涉及每30秒检索一小部分数据.这可能会持续3天的周末,因此有人可以轻易地期望一次创建超过8000行.向此数据框添加行的最有效方法是什么?
我有一个按值排序的元组列表.它们的形式(name,count)
是count是每个唯一名称的出现次数.
我想取这个列表并将其转换为CSV,其中每个名称都是列标题,每个值都是单行的列值.
有什么建议怎么办?谢谢.
使用Python附加CSV文件,我每隔一行获取一次数据.我该如何解决?
import csv
LL = [(1,2),(3,4)]
Fn = ("C:\Test.csv")
w = csv.writer(open(Fn,'a'), dialect='excel')
w.writerows(LL)
Run Code Online (Sandbox Code Playgroud)
C:\test.csv
打开时看起来像这样:
1,2
3,4
1,2
3,4
Run Code Online (Sandbox Code Playgroud) 我不完全确定我需要对此错误做些什么.我认为它与需要添加.encode('utf-8')有关.但我不完全确定这是我需要做的,也不应该在哪里应用.
错误是:
line 40, in <module>
writer.writerows(list_of_rows)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 1
7: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
这是我的python脚本的基础.
import csv
from BeautifulSoup import BeautifulSoup
url = \
'https://dummysite'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html)
table = soup.find('table', {'class': 'table'})
list_of_rows = []
for row in table.findAll('tr')[1:]:
list_of_cells = []
for cell in row.findAll('td'):
text = cell.text.replace('[','').replace(']','')
list_of_cells.append(text)
list_of_rows.append(list_of_cells)
outfile = open("./test.csv", "wb")
writer = csv.writer(outfile)
writer.writerow(["Name", "Location"])
writer.writerows(list_of_rows)
Run Code Online (Sandbox Code Playgroud) Python 3 中open(..., mode)的模式是什么,它打开一个文件
我测试过r+b
,但在丢失文件时失败,w+b
截断它,并且a+b
似乎将所有写入转换为附加,而我需要覆盖一些数据。
我试图将一组文件的内容转换为仅大写字符.继承了我到目前为止的代码:
import os
def test():
os.chdir("C:/Users/David/Files")
files = os.listdir(".")
for x in files:
inputFile = open(x, "r")
content = inputFile.read()
with open(x, "wb") as outputFile:
str.upper(content)
Run Code Online (Sandbox Code Playgroud)
当我运行它时它会删除文件的内容.