我想在我的旧csv文件中添加一个新行.基本上,每次运行Python脚本时它都会更新.
现在我将旧的csv行值存储在列表中,然后删除csv文件并使用新的列表值再次创建它.
想知道有没有更好的方法来做到这一点.
我正在写一段代码:
OutputStream outputStream = new FileOutputStream(createdFile);
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(gzipOutputStream));
Run Code Online (Sandbox Code Playgroud)
我是否需要关闭以下每个流或作者?
gzipOutputStream.close();
bw.close();
outputStream.close();
Run Code Online (Sandbox Code Playgroud)
或者只关闭最后一个流好吗?
bw.close();
Run Code Online (Sandbox Code Playgroud) FileReader rd=new FileReader("new.mp4");
FileWriter wr=new FileWriter("output.mp4");
int ch;
while((ch=rd.read())!=-1)
wr.write(ch);
wr.flush();
wr.close();
Run Code Online (Sandbox Code Playgroud)
当我使用FileReader
和FileWriter
读取和写入mp4文件时,output.mp4
文件无法很好地呈现.但是当我使用它时FileInputStream
,FileOutputStream
它运作良好.
那么我可以得出结论FileReader
,FileWriter
仅用于阅读和撰写文本吗?
Flush()
如果我写这样的东西,我不确定是否需要调用使用过的对象:
using (FileStream...)
using (CryptoStream...)
using (BinaryWriter...)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
它们总是自动刷新吗?什么时候该using
声明冲洗它们,当它不(如果可能发生)?
我意识到Python 中的csv库总是生成DOS行尾字符.即使我使用该'wb'
模式,即使我使用Linux.
import csv
f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()
Run Code Online (Sandbox Code Playgroud)
以上代码始终'\r\n'
用作行结束分隔符.我怎样才能使用它'\n'
?
该java.io.Writer的接口有两个方法称为追加和写入.这两者有什么不同?它甚至说
对表单的此方法的调用与调用的方式
out.append(c)
完全相同out.write(c)
那么有两个方法名称变体的原因是什么?
是否可以在Golang中将a转换string
为io.Writer
类型?
我将使用此字符串,fmt.Fprintf()
但我无法转换类型.
我一直对Java中不同IO实现的数量略有混淆,现在我完全陷入了项目开发阶段,我花时间阅读有用的东西.
我已经意识到在类的不同子类之间没有新手友好的比较(除了API for Writer类的简短解释)Writer
.所以我想我会解决这个问题,这些不同的子类有什么用呢?
例如,我通常使用一个FileWriter
包裹着BufferedWriter
我的输出到文件,但我总是被这样的事实所激怒,即没有println()
类似的方法,并且必须使用newLine()
每一行(使输出人类可读).PrintWriter
有println()
方法,但没有支持追加的构造函数...
如果你能从你的经验中给我两分钱,或者你可能偶然发现一个好的指南/方法,我真的很感激.
编辑:感谢大家的回复,我非常感谢这里传递的信息.有点不幸的是,整个append()
事情最终成为焦点,它仅仅意味着它作为一个例子.我的问题主要是指所有不同实现的需要和使用,我想在一些答案中有所提及.
选择一个答案很难被接受,因为有三个非常可靠的答案,每个答案都有助于我对问题的理解.我将不得不和Anon一起去,因为他的代表人数最少.积分(我认为他是SO的新手).他有15个答案,其中一些答案非常合理,并提出了0个问题.我会说,这是值得推广的好贡献.
话虽如此,ColinD和Jay也提供了非常好的答案,并指出了有趣的想法.特别是Jay关于Java自动包装的评论BufferedWriter
值得注意.再次感谢你们,真的很感激!
我有一个方法,它在启动后以异步方式运行,使用OutputStream或Writer作为参数.
它充当OutputStream或Writer的录制适配器(它是我无法更改的第三方API).
我怎么能将Log4J的内部OutputStream或Writer传递给该方法?
...因为Log4J吞下了System.out和System.err,我之前使用过.
我有一个数字列表,我想放在.csv文件的单个列中.下面的代码将值写在一行中.如何更改代码以便Python将每个值写入单独的行?谢谢.
with open('returns.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerow(daily_returns)
Run Code Online (Sandbox Code Playgroud)